PCI DSS 4.0.1 的 AKS 管控群集的持续安全监视

本文介绍根据支付卡行业数据安全标准(PCI DSS 4.0.1)配置的 Azure Kubernetes 服务(AKS)群集的持续安全监视注意事项。

本文是一系列文章的其中一篇。 阅读 简介

PCI DSS 4.0.1 显著强调持续的安全、监视和威胁检测是维护合规性的基本组成部分。 此体系结构和实现侧重于基础结构,而不是工作负荷。 本文提供了一般注意事项和最佳做法,可帮助你做出设计决策。 请遵循官方 PCI-DSS 4.0.1 标准中的要求,并在适用的情况下使用本文作为其他信息。

重要

该指南和随附的实现基于中心辐射型网络拓扑的 AKS 基线体系结构为基础。 中心虚拟网络包含用于控制出口流量的防火墙、来自本地网络的网关流量,以及用于维护的第三个网络。 辐射虚拟网络包含 AKS 群集,该群集提供卡持有者环境(CDE),并托管 PCI DSS 工作负荷。

即将推出 GitHub 徽标 参考实现:适用于 PCI DSS 4.0.1 的受管制工作负载参考实现的 Azure Kubernetes 服务(AKS)基线群集目前正在更新,即将推出。 此实现将演示一个受监管的基础结构,该基础结构演示了 CDE 中各种网络安全控制的使用。 这包括本机到 Azure 的网络控件,以及 Kubernetes 的本机控制。 它还将包括一个应用程序,用于演示环境与示例工作负荷之间的交互。 本文的重点在于基础结构。 该示例不会指示实际 PCI-DSS 4.0.1 工作负荷。

定期监视和测试网络

注释

本文已针对 PCI DSS 4.0.1 进行了更新。 重大更改包括持续监视、自动威胁检测、实时警报和全面日志记录的扩展要求。 标准现在强调主动安全监视和自动响应功能。 确保查看官方 PCI DSS 4.0.1 文档 ,了解完整详细信息和未来日期的要求。

要求 10:记录和监视对网络资源和持卡人数据的所有访问

AKS 功能支持

AKS 提供了多项功能,可帮助你满足 PCI DSS 4.0.1 持续安全监视要求:

  • Azure Monitor:为 AKS 群集和工作负载提供实时监视、警报和日志分析,并提供全面的可观测性。
  • Microsoft Defender for Cloud:为容器化工作负荷提供威胁检测、漏洞管理和合规性报告。
  • Azure Policy:通过自动修正启用持续合规性检查和执行安全标准。
  • 容器见解:为容器化应用程序提供详细的性能和运行状况监视。
  • 与 SIEM/SOAR 集成:AKS 日志和警报可与 SIEM/SOAR 平台集成,以便进行高级威胁检测和自动响应。

要求 10.1

定义和理解记录和监视对网络资源和持卡人数据的所有访问的过程和机制。

你的责任

Requirement 职责
要求 10.1.1 在要求 10 中标识的所有安全策略和作过程都记录在使用中,并向所有受影响的各方已知。
要求 10.1.2 在要求 10 中执行活动的角色和职责记录、分配和理解。

要求 10.1.1

在要求 10 中标识的所有安全策略和作过程都记录在使用中,并向所有受影响的各方已知。

你的责任

记录 AKS 环境的综合日志记录和监视过程:

  • 创建日志记录和监视策略:定义日志数据必须记录的事件、保留期和访问控制。
  • 文档监视过程:创建用于查看日志、调查异常和响应安全事件的作过程。
  • 定义事件响应过程:记录如何响应通过监视检测到的安全事件。
  • 建立培训过程:确保所有人员都了解他们在日志记录和监视活动中的角色。

实现步骤:

  1. 创建包括:

    # Example Azure Policy for AKS logging requirements
    apiVersion: policy.azure.com/v1
    kind: PolicyDefinition
    metadata:
      name: enforce-aks-logging
    spec:
      displayName: "Enforce AKS Logging Requirements"
      description: "Ensure all AKS clusters have appropriate logging enabled"
      mode: All
      parameters:
        retentionDays:
          type: Integer
          defaultValue: 365
      policyRule:
        if:
          type: Microsoft.ContainerService/managedClusters
        then:
          effect: DeployIfNotExists
          details:
            type: Microsoft.Insights/diagnosticSettings
            existenceCondition:
              allOf:
                - field: Microsoft.Insights/diagnosticSettings/logs[*].enabled
                  equals: true
                - field: Microsoft.Insights/diagnosticSettings/logs[*].retentionPolicy.days
                  greaterOrEquals: "[parameters('retentionDays')]"
    
  2. 为 AKS 群集实现全面的日志记录:

    # Enable diagnostic settings for AKS cluster
    az monitor diagnostic-settings create \
      --resource "/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.ContainerService/managedClusters/{cluster-name}" \
      --name "pci-dss-logging" \
      --workspace "/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.OperationalInsights/workspaces/{workspace-name}" \
      --logs '[
        {
          "category": "kube-apiserver",
          "enabled": true,
          "retentionPolicy": {
            "enabled": true,
            "days": 365
          }
        },
        {
          "category": "kube-audit",
          "enabled": true,
          "retentionPolicy": {
            "enabled": true,
            "days": 365
          }
        },
        {
          "category": "kube-audit-admin",
          "enabled": true,
          "retentionPolicy": {
            "enabled": true,
            "days": 365
          }
        }
      ]'
    

要求 10.1.2

在要求 10 中执行活动的角色和职责记录、分配和理解。

你的责任

定义和分配用于监视活动的明确角色和职责:

  • 安全运营中心(SOC)团队:主要负责监视和响应安全事件。
  • 平台团队:负责维护日志记录基础结构并确保日志收集。
  • 开发团队:负责实现应用程序级日志记录和监视。
  • 合规性团队:负责确保监视满足 PCI DSS 要求。

实现步骤:

  1. 创建用于监视职责的 RACI 矩阵:

    | Activity | SOC Team | Platform Team | Dev Team | Compliance Team |
    |----------|----------|---------------|----------|-----------------|
    | 24/7 monitoring | R | S | I | I |
    | Log infrastructure | I | R | I | A |
    | Application logging | I | S | R | I |
    | Compliance reporting | S | I | I | R |
    
  2. 实现用于监视访问的 Azure RBAC:

    # Assign monitoring roles
    az role assignment create \
      --assignee-object-id {soc-team-group-id} \
      --role "Monitoring Reader" \
      --scope "/subscriptions/{subscription-id}/resourceGroups/{resource-group}"
    
    az role assignment create \
      --assignee-object-id {platform-team-group-id} \
      --role "Monitoring Contributor" \
      --scope "/subscriptions/{subscription-id}/resourceGroups/{resource-group}"
    

要求 10.2

实施审核日志以支持检测异常和可疑活动,以及事件的取证分析。

你的责任

Requirement 职责
要求 10.2.1 审核日志捕获对持卡人数据的所有单个用户访问权限。
要求 10.2.2 审核日志捕获具有管理访问权限的任何个人执行的所有作,包括任何应用程序、系统或云访问。
要求 10.2.3 审核日志捕获对审核日志的所有访问权限。
要求 10.2.4 审核日志捕获所有无效的逻辑访问尝试。
要求 10.2.5 审核日志捕获对标识和身份验证凭据的所有更改。
要求 10.2.6 审核日志捕获审核日志的所有初始化。
要求 10.2.7 审核日志捕获系统级对象的所有创建和删除。

要求 10.2.1

审核日志捕获对持卡人数据的所有单个用户访问权限。

你的责任

实现持卡人数据访问的综合日志记录:

  • 启用应用程序级日志记录:确保应用程序使用用户标识记录所有持卡人数据访问。
  • 在 Pod 中实现审核日志记录:使用结构化日志记录捕获数据访问事件。
  • 配置日志聚合:集中收集应用程序日志进行分析。
  • 监视数据访问模式:实现对异常访问模式的自动检测。

实现步骤:

  1. 配置 Container Insights 以便进行全面的应用程序监视:

    # Enable Container Insights on AKS cluster
    az aks enable-addons \
      --resource-group {resource-group} \
      --name {cluster-name} \
      --addons monitoring \
      --workspace-resource-id "/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.OperationalInsights/workspaces/{workspace-name}"
    
  2. 在应用程序中实现结构化日志记录:

    # Example logging configuration for applications
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: logging-config
    data:
      log-config.json: |
        {
          "level": "INFO",
          "format": "json",
          "fields": {
            "timestamp": "required",
            "user_id": "required",
            "action": "required",
            "resource": "required",
            "result": "required",
            "source_ip": "required"
          }
        }
    

要求 10.2.2

审核日志捕获具有管理访问权限的任何个人执行的所有作,包括任何应用程序、系统或云访问。

你的责任

实现全面的管理访问日志记录:

  • 启用 Azure AD 审核日志记录:捕获 Azure AD 中的所有管理作。
  • 配置 Kubernetes 审核日志记录:为 Kubernetes API 服务器启用全面的审核日志记录。
  • 监视特权作:跟踪群集中的所有特权作。
  • 实现云访问日志记录:记录对 Azure 资源的所有管理访问权限。

实现步骤:

  1. 配置全面的 Kubernetes 审核日志记录:

    # Audit policy for comprehensive administrative logging
    apiVersion: audit.k8s.io/v1
    kind: Policy
    rules:
    - level: RequestResponse
      namespaces: ["kube-system", "default"]
      verbs: ["create", "update", "patch", "delete"]
      resources:
      - group: ""
        resources: ["pods", "services", "secrets", "configmaps"]
    - level: Request
      verbs: ["get", "list", "watch"]
      resources:
      - group: ""
        resources: ["secrets"]
    - level: Metadata
      verbs: ["get", "list", "watch"]
      resources:
      - group: ""
        resources: ["pods", "services", "configmaps"]
    
  2. 设置用于管理访问权限的 Azure Monitor 查询:

    // Monitor administrative access to AKS
    AzureActivity
    | where TimeGenerated > ago(24h)
    | where ResourceProvider == "Microsoft.ContainerService"
    | where ActivityLevel == "Informational"
    | where CategoryValue == "Administrative"
    | project TimeGenerated, Caller, OperationName, ResourceGroup, SubscriptionId, Properties
    | order by TimeGenerated desc
    

要求 10.3

审核日志受到破坏和未经授权的修改的保护。

你的责任

Requirement 职责
要求 10.3.1 对审核日志的读取访问权限仅限于需要与作业相关的日志。
要求 10.3.2 对审核日志的写入访问权限仅限于那些需要与作业相关的日志。
要求 10.3.3 审核日志备份到安全的集中式内部日志服务器或媒体。
要求 10.3.4 文件完整性监视和/或更改检测机制部署在日志上,以确保在生成警报的情况下无法更改现有日志数据。

要求 10.3.1

对审核日志的读取访问权限仅限于需要与作业相关的日志。

你的责任

对审核日志读取实施严格的访问控制:

  • 使用 Azure RBAC:为 Log Analytics 工作区实现基于角色的访问控制。
  • 实现资源级权限:仅根据作业要求授予对特定日志类别的访问权限。
  • 定期访问评审:定期评审谁有权访问审核日志。
  • 审核日志访问:监视和记录对审核日志本身的所有访问权限。

实现步骤:

  1. 为日志访问配置精细 RBAC:

    # Create custom role for SOC team with limited log access
    az role definition create --role-definition '{
      "Name": "PCI DSS Log Reader",
      "Description": "Can read security logs for PCI DSS compliance",
      "Actions": [
        "Microsoft.OperationalInsights/workspaces/query/*/read",
        "Microsoft.OperationalInsights/workspaces/sharedKeys/action"
      ],
      "NotActions": [
        "Microsoft.OperationalInsights/workspaces/*/write",
        "Microsoft.OperationalInsights/workspaces/*/delete"
      ],
      "AssignableScopes": ["/subscriptions/{subscription-id}"]
    }'
    
    # Assign the custom role to SOC team
    az role assignment create \
      --assignee-object-id {soc-team-group-id} \
      --role "PCI DSS Log Reader" \
      --scope "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.OperationalInsights/workspaces/{workspace-name}"
    
  2. 实现日志访问监视:

    // Monitor access to audit logs
    AzureActivity
    | where TimeGenerated > ago(24h)
    | where ResourceProvider == "Microsoft.OperationalInsights"
    | where OperationName contains "Query"
    | project TimeGenerated, Caller, OperationName, ResourceGroup, Properties
    | order by TimeGenerated desc
    

要求 10.3.2

对审核日志的写入访问权限仅限于那些需要与作业相关的日志。

你的责任

严格控制谁可以修改或删除审核日志:

  • 实现不可变存储:使用 Azure 存储不可变策略进行长期日志保留。
  • 限制管理访问权限:仅限制对基本人员的写入访问权限。
  • 使用托管服务:利用提供内置保护的 Azure 托管日志记录服务。
  • 实施审批工作流:需要批准任何日志配置更改。

实现步骤:

  1. 为日志保留配置不可变存储:

    # Create storage account with immutable policy
    az storage account create \
      --name {storage-account-name} \
      --resource-group {resource-group} \
      --location {location} \
      --sku Standard_LRS \
      --kind StorageV2
    
    # Enable immutable policy for log container
    az storage container immutability-policy create \
      --account-name {storage-account-name} \
      --container-name logs \
      --period 2555 \
      --resource-group {resource-group}
    
  2. 使用严格的访问控制配置 Log Analytics 工作区:

    # Lock the Log Analytics workspace to prevent accidental deletion
    az lock create \
      --name "pci-dss-logs-lock" \
      --lock-type CanNotDelete \
      --resource-group {resource-group} \
      --resource-name {workspace-name} \
      --resource-type Microsoft.OperationalInsights/workspaces
    

要求 10.3.3

审核日志备份到安全的集中式内部日志服务器或媒体。

你的责任

为审核日志实施全面的备份和存档:

  • 配置日志导出:设置日志的自动导出以保护存储。
  • 实现异地冗余存储:对日志备份使用具有异地冗余的 Azure 存储。
  • 建立保留策略:为不同类型的日志定义适当的保留期。
  • 测试备份恢复:定期测试从备份还原日志的能力。

实现步骤:

  1. 配置自动日志导出:

    # Create data export rule for critical logs
    az monitor log-analytics workspace data-export create \
      --resource-group {resource-group} \
      --workspace-name {workspace-name} \
      --name "pci-dss-log-export" \
      --destination "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Storage/storageAccounts/{storage-account-name}" \
      --table-names "AzureActivity" "KubePodInventory" "KubeEvents" "ContainerLog" \
      --enabled true
    
  2. 为日志备份设置异地冗余存储:

    # Create geo-redundant storage for log backups
    az storage account create \
      --name {backup-storage-account-name} \
      --resource-group {resource-group} \
      --location {location} \
      --sku Standard_GRS \
      --kind StorageV2 \
      --encryption-services blob file \
      --https-only true
    

要求 10.4

审核日志会进行审核,以识别异常或可疑活动。

你的责任

Requirement 职责
要求 10.4.1 每天至少查看一次以下审核日志。
要求 10.4.2 将定期查看所有其他系统组件的日志。
要求 10.4.3 解决在评审过程中识别的异常和异常。

要求 10.4.1

每天至少查看一次以下审核日志。

你的责任

为关键审核日志实施每日评审过程:

  • 自动执行每日日志评审:使用 Azure Monitor 工作簿和警报进行每日日志分析。
  • 专注于高风险活动:优先审查管理访问权限、登录失败和数据访问。
  • 实现异常情况检测:使用基于机器学习的异常情况检测进行自动分析。
  • 文档评审结果:维护每日日志评审记录和采取的任何作。

实现步骤:

  1. 创建自动每日日志评审工作簿:

    // Daily security review query
    let StartTime = ago(1d);
    let EndTime = now();
    
    // Failed authentication attempts
    SigninLogs
    | where TimeGenerated between(StartTime .. EndTime)
    | where ResultType != 0
    | where AppDisplayName contains "Azure Kubernetes Service"
    | summarize FailedAttempts = count() by UserPrincipalName, IPAddress, ResultType
    | order by FailedAttempts desc
    
    // Administrative activities
    union
    (AzureActivity
    | where TimeGenerated between(StartTime .. EndTime)
    | where CategoryValue == "Administrative"
    | where ResourceProvider == "Microsoft.ContainerService"),
    
    // Kubernetes audit events
    (KubeAuditLogs
    | where TimeGenerated between(StartTime .. EndTime)
    | where Verb in ("create", "update", "delete")
    | where ObjectRef_Resource in ("secrets", "configmaps", "pods"))
    
    | project TimeGenerated, Caller, OperationName, ResourceGroup, Level
    | order by TimeGenerated desc
    
  2. 设置自动每日警报:

    # Create action group for daily alerts
    az monitor action-group create \
      --name "pci-dss-daily-alerts" \
      --resource-group {resource-group} \
      --short-name "PCIAlerts" \
      --email-receiver name="SOC Team" email="soc@company.com"
    
    # Create scheduled query alert for daily review
    az monitor scheduled-query create \
      --name "Daily Security Review Alert" \
      --resource-group {resource-group} \
      --scopes "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.OperationalInsights/workspaces/{workspace-name}" \
      --condition "count > 0" \
      --condition-query "SigninLogs | where TimeGenerated > ago(1d) | where ResultType != 0 | where AppDisplayName contains 'Azure Kubernetes Service' | count" \
      --description "Daily alert for failed authentication attempts" \
      --evaluation-frequency "24h" \
      --window-size "24h" \
      --action-groups "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Insights/actionGroups/pci-dss-daily-alerts"
    

要求 10.4.2

将定期查看所有其他系统组件的日志。

你的责任

为所有系统日志建立定期评审过程:

  • 创建评审计划:定义不同日志类型的每周、每月和季度评审周期。
  • 自动执行定期分析:使用 Azure Monitor 工作簿进行自动定期日志分析。
  • 实现趋势分析:跟踪一段时间内的安全指标以识别模式。
  • 文档评审过程:维护定期日志评审的过程。

实现步骤:

  1. 创建每周安全趋势分析:

    // Weekly security trends
    let WeeklyData = AzureActivity
    | where TimeGenerated > ago(7d)
    | where ResourceProvider == "Microsoft.ContainerService"
    | summarize 
        TotalActivities = count(),
        UniqueUsers = dcount(Caller),
        FailedOperations = countif(ActivityStatus == "Failed")
    by bin(TimeGenerated, 1d)
    | order by TimeGenerated desc;
    
    WeeklyData
    | render timechart
    
  2. 设置每月合规性报告:

    # Create monthly compliance report automation
    az automation runbook create \
      --automation-account-name {automation-account-name} \
      --resource-group {resource-group} \
      --name "monthly-pci-compliance-report" \
      --type PowerShell \
      --description "Generate monthly PCI DSS compliance report"
    

要求 10.5

审核日志受到保护,因此无法更改它们。

你的责任

Requirement 职责
要求 10.5.1 审核日志受到破坏和未经授权的修改的保护。

要求 10.5.1

审核日志受到破坏和未经授权的修改的保护。

你的责任

对审核日志实施全面的保护:

  • 使用不可变存储:为关键日志实现写入一次读取多(WORM)存储。
  • 实现文件完整性监视:使用 Azure 安全中心进行文件完整性监视。
  • 配置日志转发:将日志转发到外部 SIEM 系统以获得更多保护。
  • 实现加密保护:使用数字签名或校验和来实现日志完整性。

实现步骤:

  1. 配置文件完整性监视:

    # Enable file integrity monitoring in Microsoft Defender for Cloud
    az security workspace-setting create \
      --name default \
      --target-workspace "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.OperationalInsights/workspaces/{workspace-name}" \
      --enabled true
    
  2. 设置日志转发到外部 SIEM:

    # Example Fluentd configuration for log forwarding
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: fluentd-config
    data:
      fluent.conf: |
        <source>
          @type tail
          path /var/log/containers/*.log
          pos_file /var/log/fluentd-containers.log.pos
          tag kubernetes.*
          read_from_head true
          <parse>
            @type json
            time_key time
            time_format %Y-%m-%dT%H:%M:%S.%NZ
          </parse>
        </source>
    
        <filter kubernetes.**>
          @type kubernetes_metadata
        </filter>
    
        <match **>
          @type copy
          <store>
            @type elasticsearch
            host {elasticsearch-host}
            port 9200
            logstash_format true
            logstash_prefix kubernetes
            include_timestamp true
            type_name _doc
            <buffer>
              @type file
              path /var/log/fluentd-buffers/kubernetes.system.buffer
              flush_mode interval
              retry_type exponential_backoff
              flush_thread_count 2
              flush_interval 5s
              retry_forever
              retry_max_interval 30
              chunk_limit_size 2M
              queue_limit_length 8
              overflow_action block
            </buffer>
          </store>
          <store>
            @type syslog
            host {siem-host}
            port 514
            protocol tcp
            format rfc5424
          </store>
        </match>
    

后续步骤

实施全面的安全策略和作过程,以维护和治理 PCI DSS 合规性框架。

有关在 AKS 环境中实现持续安全监视的详细信息,请参阅:

有关 PCI DSS 4.0.1 要求的详细信息,请查看官方 PCI DSS 4.0.1 文档