인터페이스는 현지화되어 있으며, Skill 소개와 설명 문서는 선택한 언어로 AI가 자동 번역합니다. 코드·명령어·경로·전문 용어는 원문을 유지하며 원작자 문서가 우선합니다.
Skills 둘러보기
생산성 및 협업 · SKILL.md

implementing-delinea-secret-server-for-pam

implementing-delinea-secret-server-for-pam

为特权访问管理(PAM)实施 Delinea Secret Server,包括 密钥库配置、基于角色的访问策略、自动密码轮换、 会话录制,以及与 Active Directory 和云平台的集成。 适用于 PAM 部署、特权凭据保管、 密钥服务器管理或密码轮换自动化相关请求。

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill 문서

GitHub

name: implementing-delinea-secret-server-for-pam description: > 为特权访问管理(PAM)实施 Delinea Secret Server,包括 密钥库配置、基于角色的访问策略、自动密码轮换、 会话录制,以及与 Active Directory 和云平台的集成。 适用于 PAM 部署、特权凭据保管、 密钥服务器管理或密码轮换自动化相关请求。 domain: cybersecurity subdomain: identity-access-management tags: [PAM, Delinea, Secret-Server, privileged-access, password-vault, credential-management] version: "1.0" author: mahipal license: Apache-2.0

使用 Delinea Secret Server 实施 PAM

适用场景

  • 组织需要跨混合基础设施集中管理特权凭据
  • 合规要求强制执行特权访问控制(SOX、PCI-DSS、HIPAA、NIST 800-53)
  • 服务账户和共享凭据存储在电子表格或明文文件中
  • 需要为特权账户实施自动密码轮换
  • 需要对特权用户活动进行会话录制和键盘记录
  • 正在从手动 PAM 流程迁移到企业级密钥库解决方案

不适用于标准终端用户密码管理;Delinea Secret Server 专为需要企业级控制的特权账户和共享账户凭据管理而设计。

前置条件

  • Delinea Secret Server 许可证(本地部署或云端)
  • 本地部署需要 Windows Server 2019/2022,并安装 IIS 和 SQL Server
  • 具有读取权限的 Active Directory 服务账户(用于发现)
  • 用于 Web 界面加密的 SSL/TLS 证书
  • 与目标系统的网络连接(用于密码轮换)
  • PowerShell 5.1+ 用于自动化脚本

工作流程

步骤 1:部署 Secret Server 基础设施

安装和配置 Secret Server 应用服务器:

# 本地部署预安装检查
# 验证 IIS 是否安装了所需功能
Import-Module ServerManager
Install-WindowsFeature Web-Server, Web-Asp-Net45, Web-Windows-Auth, Web-Mgmt-Console

# 验证 SQL Server 连接
$sqlConn = New-Object System.Data.SqlClient.SqlConnection
$sqlConn.ConnectionString = "Server=sql01.corp.local;Database=master;Integrated Security=True"
$sqlConn.Open()
Write-Host "SQL Server 连接成功:$($sqlConn.ServerVersion)"
$sqlConn.Close()

# 创建 Secret Server 数据库
Invoke-Sqlcmd -ServerInstance "sql01.corp.local" -Query @"
CREATE DATABASE SecretServer
GO
ALTER DATABASE SecretServer SET RECOVERY FULL
GO
"@

# 下载并运行 Secret Server 安装程序
# 访问 https://thy.center/ss/link/SSDownload 获取最新版本
# 运行 setup.exe 并按照安装向导操作

# 安装后:配置应用程序池
Import-Module WebAdministration
Set-ItemProperty "IIS:\AppPools\SecretServer" -Name processModel.identityType -Value SpecificUser
Set-ItemProperty "IIS:\AppPools\SecretServer" -Name processModel.userName -Value "CORP\svc-secretserver"

步骤 2:配置密钥模板和文件夹结构

定义密钥模板并组织库层次结构:

# 连接到 Secret Server API
$baseUrl = "https://pam.corp.local/SecretServer"
$creds = @{
    username = "ss-admin"
    password = $env:SS_ADMIN_PASSWORD
    grant_type = "password"
}
$token = (Invoke-RestMethod "$baseUrl/oauth2/token" -Method POST -Body $creds).access_token
$headers = @{ Authorization = "Bearer $token" }

# 创建用于组织密钥的文件夹结构
$folders = @(
    @{ folderName = "Windows 服务器"; parentFolderId = -1; inheritPermissions = $false },
    @{ folderName = "Linux 服务器"; parentFolderId = -1; inheritPermissions = $false },
    @{ folderName = "网络设备"; parentFolderId = -1; inheritPermissions = $false },
    @{ folderName = "云账户"; parentFolderId = -1; inheritPermissions = $false },
    @{ folderName = "服务账户"; parentFolderId = -1; inheritPermissions = $false },
    @{ folderName = "数据库账户"; parentFolderId = -1; inheritPermissions = $false }
)

foreach ($folder in $folders) {
    Invoke-RestMethod "$baseUrl/api/v1/folders" -Method POST -Headers $headers `
        -ContentType "application/json" -Body ($folder | ConvertTo-Json)
}

# 为数据库凭据创建自定义密钥模板
$template = @{
    name = "数据库凭据"
    fields = @(
        @{ name = "服务器"; isRequired = $true; fieldType = "Text" },
        @{ name = "端口"; isRequired = $true; fieldType = "Text" },
        @{ name = "数据库"; isRequired = $true; fieldType = "Text" },
        @{ name = "用户名"; isRequired = $true; fieldType = "Text" },
        @{ name = "密码"; isRequired = $true; fieldType = "Password" },
        @{ name = "连接字符串"; isRequired = $false; fieldType = "Notes" }
    )
}
Invoke-RestMethod "$baseUrl/api/v1/secret-templates" -Method POST -Headers $headers `
    -ContentType "application/json" -Body ($template | ConvertTo-Json -Depth 3)

步骤 3:配置发现和账户入库

设置跨环境自动发现特权账户:

# 配置 Active Directory 发现源
$adDiscovery = @{
    name = "企业 AD 发现"
    discoverySourceType = "ActiveDirectory"
    active = $true
    settings = @{
        domainName = "corp.local"
        friendlyName = "企业域"
        discoveryAccountId = 12  # 服务账户密钥 ID
        ouFilters = @(
            "OU=Servers,DC=corp,DC=local",
            "OU=Workstations,DC=corp,DC=local"
        )
    }
    scanInterval = 86400  # 24 小时
}
Invoke-RestMethod "$baseUrl/api/v1/discovery" -Method POST -Headers $headers `
    -ContentType "application/json" -Body ($adDiscovery | ConvertTo-Json -Depth 3)

# 为 Windows 服务器配置本地账户发现
$localDiscovery = @{
    name = "Windows 本地账户发现"
    discoverySourceType = "Machine"
    active = $true
    settings = @{
        machineType = "Windows"
        accountScanTemplate = "Windows 本地账户"
        dependencyScanTemplate = "Windows 服务"
    }
}
Invoke-RestMethod "$baseUrl/api/v1/discovery" -Method POST -Headers $headers `
    -ContentType "application/json" -Body ($localDiscovery | ConvertTo-Json -Depth 3)

# 将发现的账户导入为密钥
# 发现运行后,审查并导入找到的账户
$discoveredAccounts = Invoke-RestMethod "$baseUrl/api/v1/discovery/status" -Headers $headers
Write-Host "已发现 $($discoveredAccounts.totalAccounts) 个账户"
Write-Host "  - 域管理员:$($discoveredAccounts.domainAdmins)"
Write-Host "  - 本地管理员:$($discoveredAccounts.localAdmins)"
Write-Host "  - 服务账户:$($discoveredAccounts.serviceAccounts)"

步骤 4:实施密码轮换策略

配置带复杂度要求的自动密码轮换:

# 创建密码轮换策略
$rotationPolicy = @{
    name = "高安全性 30 天轮换"
    rotationIntervalDays = 30
    passwordRequirements = @{
        minimumLength = 24
        maximumLength = 32
        requireUpperCase = $true
        requireLowerCase = $true
        requireNumbers = $true
        requireSymbols = $true
        allowedSymbols = "!@#$%^&*()-_=+[]{}|;:,.<>?"
    }
    rotationType = "AutoChange"
    autoChangeSchedule = @{
        changeType = "RecurringSchedule"
        recurrenceType = "Monthly"
        dayOfMonth = 1
        startTime = "02:00"
    }
}
Invoke-RestMethod "$baseUrl/api/v1/remote-password-changing/configuration" -Method POST `
    -Headers $headers -ContentType "application/json" -Body ($rotationPolicy | ConvertTo-Json -Depth 4)

# 为 Windows 账户配置远程密码更改(RPC)
$rpcConfig = @{
    secretId = 100  # 目标密钥
    autoChangeEnabled = $true
    autoChangeNextPassword = $true
    privilegedAccountSecretId = 50  # 用于执行更改的账户
    changePasswordUsing = "PrivilegedAccount"
}
Invoke-RestMethod "$baseUrl/api/v1/secrets/100/remote-password-changing" -Method PUT `
    -Headers $headers -ContentType "application/json" -Body ($rpcConfig | ConvertTo-Json)

# 配置心跳监控以验证凭据有效性
$heartbeat = @{
    enabled = $true
    intervalMinutes = 60
    onFailure = "SendAlert"
    alertEmailGroupId = 5
}
Invoke-RestMethod "$baseUrl/api/v1/secrets/100/heartbeat" -Method PUT `
    -Headers $headers -ContentType "application/json" -Body ($heartbeat | ConvertTo-Json)

步骤 5:配置会话录制和监控

为特权访问会话启用会话录制:

# 启用会话录制策略
$sessionPolicy = @{
    name = "完整录制策略"
    recordSessions = $true
    recordKeystrokes = $true
    recordApplications = $true
    maxSessionDurationMinutes = 480
    requireComment = $true
    requireTicketNumber = $true
    ticketSystemId = 1  # ServiceNow 集成
    settings = @{
        videoCodec = "H264"
        videoQuality = "High"
        captureInterval = 1000  # 毫秒
        storageLocation = "\\\\fileserver\\SSRecordings"
        retentionDays = 365
    }
}
Invoke-RestMethod "$baseUrl/api/v1/secret-policy" -Method POST -Headers $headers `
    -ContentType "application/json" -Body ($sessionPolicy | ConvertTo-Json -Depth 3)

# 为 RDP 会话配置会话启动器
$rdpLauncher = @{
    launcherType = "RDP"
    enableRecording = $true
    enableDualControl = $true
    approverGroupId = 10  # 安全团队组
    connectAsSecretId = 100
    settings = @{
        useSSL = $true
        restrictedEndpoints = @("192.168.1.0/24")
        inactivityTimeout = 30  # 分钟
    }
}
Invoke-RestMethod "$baseUrl/api/v1/launchers" -Method POST -Headers $headers `
    -ContentType "application/json" -Body ($rdpLauncher | ConvertTo-Json -Depth 3)

# 配置双重控制/审批工作流
$approvalWorkflow = @{
    name = "Tier-0 账户审批"
    requireApproval = $true
    approvers = @(
        @{ groupId = 10; requiredApprovals = 1 }
    )
    accessRequestExpirationMinutes = 60
    notifyOnApproval = $true
    notifyOnDenial = $true
}

步骤 6:与 SIEM 和合规报告集成

将 Secret Server 事件连接到安全监控:

# 配置 Syslog 转发到 SIEM
$syslogConfig = @{
    enabled = $true
    syslogServer = "siem.corp.local"
    port = 514
    protocol = "TLS"
    facility = "Auth"
    severity = "Informational"
    events = @(
        "SecretView", "SecretEdit", "SecretCreate", "SecretDelete",
        "PasswordChange", "PasswordChangeFailure",
        "SessionStart", "SessionEnd",
        "LoginFailure", "LoginSuccess",
        "PermissionChange", "ApprovalRequest"
    )
}
Invoke-RestMethod "$baseUrl/api/v1/configuration/syslog" -Method PUT -Headers $headers `
    -ContentType "application/json" -Body ($syslogConfig | ConvertTo-Json -Depth 2)

# 生成合规报告
$report = @{
    reportType = "PasswordCompliance"
    dateRange = @{
        startDate = (Get-Date).AddDays(-30).ToString("yyyy-MM-dd")
        endDate = (Get-Date).ToString("yyyy-MM-dd")
    }
    filters = @{
        folderIds = @(1, 2, 3, 4, 5, 6)
        includeSubFolders = $true
    }
}
$reportResult = Invoke-RestMethod "$baseUrl/api/v1/reports" -Method POST -Headers $headers `
    -ContentType "application/json" -Body ($report | ConvertTo-Json -Depth 3)

# 显示合规摘要
Write-Host "PAM 合规报告"
Write-Host "====================="
Write-Host "密钥总数:         $($reportResult.totalSecrets)"
Write-Host "轮换合规:         $($reportResult.rotationCompliant) ($($reportResult.rotationCompliancePct)%)"
Write-Host "心跳健康:         $($reportResult.heartbeatHealthy) ($($reportResult.heartbeatHealthyPct)%)"
Write-Host "密码超龄 > 90 天:  $($reportResult.passwordAgeViolations)"
Write-Host "孤儿账户:         $($reportResult.orphanedAccounts)"

核心概念

术语定义
特权访问管理(PAM)通过凭据保管和会话管理来控制、监控和审计对关键系统和数据的提升访问的安全框架
密钥(Secret)库中存储的凭据或敏感数据项,包括密码、SSH 密钥、API 令牌和证书
远程密码更改(RPC)无需人工干预,根据定义的策略连接到目标系统轮换密码的自动化机制
心跳(Heartbeat)定期检查以验证存储的凭据与目标系统的一致性,确保库内容保持同步和可用
双重控制(Dual Control)在授予对高度敏感密钥的访问权限之前,需要第二个授权用户批准的安全机制
发现(Discovery)跨 Active Directory、服务器和网络设备自动扫描基础设施,识别特权账户、服务账户和依赖关系
会话录制(Session Recording)捕获完整的特权会话活动,包括视频、键盘输入和应用程序使用情况,用于审计和取证审查

工具与系统

  • Delinea Secret Server:企业级 PAM 解决方案,提供凭据保管、密码轮换、会话录制和特权访问工作流
  • Delinea Distributed Engine:部署在网络分段中的代理,用于跨防火墙环境实现密码更改和发现
  • Secret Server REST API:用于程序化密钥管理、自动化以及与 DevOps 流水线集成的 RESTful API
  • Secret Server SDK:用于应用程序级 Secret Server 库集成的 .NET 和 PowerShell SDK

常见场景

场景:将共享管理员凭据迁移到库

背景:一个组织将 500+ 个共享管理员凭据存储在 Excel 电子表格和密码保护文档中。审计人员将此标记为需要在 90 天内整改的关键发现。

处理方式:

  1. 使用 SQL Server 后端部署 Secret Server 并配置 HTTPS 访问
  2. 设计反映组织结构的文件夹层次(按部门、系统类型、环境)
  3. 创建与正在使用的凭据类型匹配的密钥模板(Windows、Linux、数据库、网络设备)
  4. 通过 CSV 导入或 PowerShell 批量创建导入现有凭据
  5. 配置发现以查找 AD 和本地系统中未记录的特权账户
  6. 从非生产账户开始启用远程密码更改以验证轮换
  7. 推出会话启动器,替换直接的 RDP/SSH 连接
  8. 逐步为 Tier-0 账户(域管理员、root 账户)启用双重控制
  9. 配置 SIEM 集成和合规报告以提供审计证据

注意事项:

  • 启用密码轮换前未识别所有服务账户依赖关系(会导致服务中断)
  • 未先在非生产环境测试就为生产账户启用 RPC
  • 为需要协调重启的服务账户设置的轮换间隔太短
  • 未为防火墙隔离的网络分段配置 Distributed Engine

输出格式

DELINEA SECRET SERVER PAM 部署报告
=============================================
环境:        混合(本地 + Azure)
版本:        Secret Server 11.6
部署模式:     本地(高可用性)

库统计
密钥总数:         1,247
  Windows 凭据:   523
  Linux/SSH 密钥:  312
  数据库账户:      198
  网络设备:        87
  云 API 密钥:     127

密码轮换状态
自动更改已启用:   1,089 / 1,247 (87.3%)
轮换合规:        1,056 / 1,089 (97.0%)
心跳健康:        1,198 / 1,247 (96.1%)
轮换失败(30 天):12

会话管理
活跃会话:         23
录制会话(30 天):4,567
平均会话时长:     22 分钟
审批请求(30 天):189(174 已批准,15 已拒绝)

发现结果
扫描系统:        2,340
发现账户:        3,891
已入库:          1,247 (32.1%)
待审查:          892

合规性
SOX 控制满足:    12/12
PCI-DSS 要求:    8/8
密码超龄违规:    3(整改中)
저장한 Skills