本文介绍根据支付卡行业数据安全标准(PCI DSS 4.0.1)配置的 Azure Kubernetes 服务(AKS)群集的持续安全监视注意事项。
本文是一系列文章的其中一篇。 阅读 简介。
PCI DSS 4.0.1 显著强调持续的安全、监视和威胁检测是维护合规性的基本组成部分。 此体系结构和实现侧重于基础结构,而不是工作负荷。 本文提供了一般注意事项和最佳做法,可帮助你做出设计决策。 请遵循官方 PCI-DSS 4.0.1 标准中的要求,并在适用的情况下使用本文作为其他信息。
重要
该指南和随附的实现基于中心辐射型网络拓扑的 AKS 基线体系结构为基础。 中心虚拟网络包含用于控制出口流量的防火墙、来自本地网络的网关流量,以及用于维护的第三个网络。 辐射虚拟网络包含 AKS 群集,该群集提供卡持有者环境(CDE),并托管 PCI DSS 工作负荷。
参考实现:适用于 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 环境的综合日志记录和监视过程:
- 创建日志记录和监视策略:定义日志数据必须记录的事件、保留期和访问控制。
- 文档监视过程:创建用于查看日志、调查异常和响应安全事件的作过程。
- 定义事件响应过程:记录如何响应通过监视检测到的安全事件。
- 建立培训过程:确保所有人员都了解他们在日志记录和监视活动中的角色。
实现步骤:
创建包括:
# 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')]"
为 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 要求。
实现步骤:
创建用于监视职责的 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 |
实现用于监视访问的 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 中实现审核日志记录:使用结构化日志记录捕获数据访问事件。
- 配置日志聚合:集中收集应用程序日志进行分析。
- 监视数据访问模式:实现对异常访问模式的自动检测。
实现步骤:
配置 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}"
在应用程序中实现结构化日志记录:
# 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 资源的所有管理访问权限。
实现步骤:
配置全面的 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"]
设置用于管理访问权限的 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 工作区实现基于角色的访问控制。
- 实现资源级权限:仅根据作业要求授予对特定日志类别的访问权限。
- 定期访问评审:定期评审谁有权访问审核日志。
- 审核日志访问:监视和记录对审核日志本身的所有访问权限。
实现步骤:
为日志访问配置精细 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}"
实现日志访问监视:
// 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 托管日志记录服务。
- 实施审批工作流:需要批准任何日志配置更改。
实现步骤:
为日志保留配置不可变存储:
# 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}
使用严格的访问控制配置 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 存储。
- 建立保留策略:为不同类型的日志定义适当的保留期。
- 测试备份恢复:定期测试从备份还原日志的能力。
实现步骤:
配置自动日志导出:
# 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
为日志备份设置异地冗余存储:
# 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 工作簿和警报进行每日日志分析。
- 专注于高风险活动:优先审查管理访问权限、登录失败和数据访问。
- 实现异常情况检测:使用基于机器学习的异常情况检测进行自动分析。
- 文档评审结果:维护每日日志评审记录和采取的任何作。
实现步骤:
创建自动每日日志评审工作簿:
// 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
设置自动每日警报:
# 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 工作簿进行自动定期日志分析。
- 实现趋势分析:跟踪一段时间内的安全指标以识别模式。
- 文档评审过程:维护定期日志评审的过程。
实现步骤:
创建每周安全趋势分析:
// 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
设置每月合规性报告:
# 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 系统以获得更多保护。
- 实现加密保护:使用数字签名或校验和来实现日志完整性。
实现步骤:
配置文件完整性监视:
# 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
设置日志转发到外部 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 环境中实现持续安全监视的详细信息,请参阅:
- 用于容器的 Azure Monitor
- Microsoft Defender for Cloud
- 适用于 AKS 的 Azure Policy
- Kubernetes 审核日志记录
- Azure Monitor 工作簿
有关 PCI DSS 4.0.1 要求的详细信息,请查看官方 PCI DSS 4.0.1 文档。