Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Implements Delinea Secret Server for privileged access management (PAM) including secret vault configuration, role-based access policies, automated password rotation, session recording, and integration with Active Directory and cloud platforms. Activates for requests involving PAM deployment, privileged credential vaulting, secret server administration, or password rotation automation.
.claude/skills/implementing-delinea-secret-server-for-pam/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-17 | ✗→✓ | ▲ Improved | — | — |
| case-13 | ✗→✓ | ▲ Improved | — | — |
| case-18 | ✗→✓ | ▲ Improved | — | — |
| case-05 | ✗→✓ | ▲ Improved | — | — |
| case-15 | ✗→✓ | ▲ Improved | — | — |
Do not use for standard end-user password management; Delinea Secret Server is designed for privileged and shared account credential management requiring enterprise-grade controls.
Install and configure the Secret Server application server:
powershell# Pre-installation checks for on-premises deployment # Verify IIS is installed with required features Import-Module ServerManager Install-WindowsFeature Web-Server, Web-Asp-Net45, Web-Windows-Auth, Web-Mgmt-Console # Verify SQL Server connectivity $sqlConn = New-Object System.Data.SqlClient.SqlConnection $sqlConn.ConnectionString = "Server=sql01.corp.local;Database=master;Integrated Security=True" $sqlConn.Open() Write-Host "SQL Server connection successful: $($sqlConn.ServerVersion)" $sqlConn.Close() # Create Secret Server database Invoke-Sqlcmd -ServerInstance "sql01.corp.local" -Query @" CREATE DATABASE SecretServer GO ALTER DATABASE SecretServer SET RECOVERY FULL GO "@ # Download and run Secret Server installer # Navigate to https://thy.center/ss/link/SSDownload for latest version # Run setup.exe and follow the installation wizard # Post-installation: Configure application pool 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"
Define secret templates and organize the vault hierarchy:
powershell# Connect to 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" } # Create folder structure for organizing secrets $folders = @( @{ folderName = "Windows Servers"; parentFolderId = -1; inheritPermissions = $false }, @{ folderName = "Linux Servers"; parentFolderId = -1; inheritPermissions = $false }, @{ folderName = "Network Devices"; parentFolderId = -1; inheritPermissions = $false }, @{ folderName = "Cloud Accounts"; parentFolderId = -1; inheritPermissions = $false }, @{ folderName = "Service Accounts"; parentFolderId = -1; inheritPermissions = $false }, @{ folderName = "Database Accounts"; 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) } # Create custom secret template for database credentials $template = @{ name = "Database Credential" fields = @( @{ name = "Server"; isRequired = $true; fieldType = "Text" }, @{ name = "Port"; isRequired = $true; fieldType = "Text" }, @{ name = "Database"; isRequired = $true; fieldType = "Text" }, @{ name = "Username"; isRequired = $true; fieldType = "Text" }, @{ name = "Password"; isRequired = $true; fieldType = "Password" }, @{ name = "Connection String"; isRequired = $false; fieldType = "Notes" } ) } Invoke-RestMethod "$baseUrl/api/v1/secret-templates" -Method POST -Headers $headers ` -ContentType "application/json" -Body ($template | ConvertTo-Json -Depth 3)
Set up automated discovery of privileged accounts across the environment:
powershell# Configure Active Directory discovery source $adDiscovery = @{ name = "Corporate AD Discovery" discoverySourceType = "ActiveDirectory" active = $true settings = @{ domainName = "corp.local" friendlyName = "Corporate Domain" discoveryAccountId = 12 # Service account secret ID ouFilters = @( "OU=Servers,DC=corp,DC=local", "OU=Workstations,DC=corp,DC=local" ) } scanInterval = 86400 # 24 hours } Invoke-RestMethod "$baseUrl/api/v1/discovery" -Method POST -Headers $headers ` -ContentType "application/json" -Body ($adDiscovery | ConvertTo-Json -Depth 3) # Configure local account discovery for Windows servers $localDiscovery = @{ name = "Windows Local Account Discovery" discoverySourceType = "Machine" active = $true settings = @{ machineType = "Windows" accountScanTemplate = "Windows Local Account" dependencyScanTemplate = "Windows Service" } } Invoke-RestMethod "$baseUrl/api/v1/discovery" -Method POST -Headers $headers ` -ContentType "application/json" -Body ($localDiscovery | ConvertTo-Json -Depth 3) # Import discovered accounts as secrets # After discovery runs, review and import found accounts $discoveredAccounts = Invoke-RestMethod "$baseUrl/api/v1/discovery/status" -Headers $headers Write-Host "Discovered $($discoveredAccounts.totalAccounts) accounts" Write-Host " - Domain Admins: $($discoveredAccounts.domainAdmins)" Write-Host " - Local Admins: $($discoveredAccounts.localAdmins)" Write-Host " - Service Accounts: $($discoveredAccounts.serviceAccounts)"
Configure automated password rotation with complexity requirements:
powershell# Create password rotation policy $rotationPolicy = @{ name = "High-Security 30-Day Rotation" 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) # Configure Remote Password Changing (RPC) for Windows accounts $rpcConfig = @{ secretId = 100 # Target secret autoChangeEnabled = $true autoChangeNextPassword = $true privilegedAccountSecretId = 50 # Account used to perform the change changePasswordUsing = "PrivilegedAccount" } Invoke-RestMethod "$baseUrl/api/v1/secrets/100/remote-password-changing" -Method PUT ` -Headers $headers -ContentType "application/json" -Body ($rpcConfig | ConvertTo-Json) # Configure heartbeat monitoring to verify credential validity $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)
Enable session recording for privileged access sessions:
powershell# Enable session recording policy $sessionPolicy = @{ name = "Full Recording Policy" recordSessions = $true recordKeystrokes = $true recordApplications = $true maxSessionDurationMinutes = 480 requireComment = $true requireTicketNumber = $true ticketSystemId = 1 # ServiceNow integration settings = @{ videoCodec = "H264" videoQuality = "High" captureInterval = 1000 # milliseconds 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) # Configure session launcher for RDP sessions $rdpLauncher = @{ launcherType = "RDP" enableRecording = $true enableDualControl = $true approverGroupId = 10 # Security team group connectAsSecretId = 100 settings = @{ useSSL = $true restrictedEndpoints = @("192.168.1.0/24") inactivityTimeout = 30 # minutes } } Invoke-RestMethod "$baseUrl/api/v1/launchers" -Method POST -Headers $headers ` -ContentType "application/json" -Body ($rdpLauncher | ConvertTo-Json -Depth 3) # Configure dual control / approval workflow $approvalWorkflow = @{ name = "Tier-0 Account Approval" requireApproval = $true approvers = @( @{ groupId = 10; requiredApprovals = 1 } ) accessRequestExpirationMinutes = 60 notifyOnApproval = $true notifyOnDenial = $true }
Connect Secret Server events to security monitoring:
powershell# Configure Syslog forwarding to 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) # Generate compliance report $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) # Display compliance summary Write-Host "PAM Compliance Report" Write-Host "=====================" Write-Host "Total Secrets: $($reportResult.totalSecrets)" Write-Host "Rotation Compliant: $($reportResult.rotationCompliant) ($($reportResult.rotationCompliancePct)%)" Write-Host "Heartbeat Healthy: $($reportResult.heartbeatHealthy) ($($reportResult.heartbeatHealthyPct)%)" Write-Host "Password Age > 90d: $($reportResult.passwordAgeViolations)" Write-Host "Orphaned Accounts: $($reportResult.orphanedAccounts)"
| Term | Definition | |------|------------| | Privileged Access Management (PAM) | Security framework for controlling, monitoring, and auditing elevated access to critical systems and data through credential vaulting and session management | | Secret | A stored credential or sensitive data item in the vault, including passwords, SSH keys, API tokens, and certificates | | Remote Password Changing (RPC) | Automated mechanism that connects to target systems to rotate passwords according to defined policies without manual intervention | | Heartbeat | Periodic check that validates stored credentials against target systems to ensure vault contents remain synchronized and functional | | Dual Control | Security mechanism requiring approval from a second authorized user before granting access to highly sensitive secrets | | Discovery | Automated scanning of infrastructure to identify privileged accounts, service accounts, and dependencies across Active Directory, servers, and network devices | | Session Recording | Capture of complete privileged session activity including video, keystrokes, and application usage for audit and forensic review |
Context: An organization stores 500+ shared administrator credentials in Excel spreadsheets and password-protected documents. Auditors flagged this as a critical finding requiring remediation within 90 days.
Approach:
Pitfalls:
DELINEA SECRET SERVER PAM DEPLOYMENT REPORT
=============================================
Environment: Hybrid (On-Premises + Azure)
Version: Secret Server 11.6
Deployment Mode: On-Premises (High Availability)
VAULT STATISTICS
Total Secrets: 1,247
Windows Credentials: 523
Linux/SSH Keys: 312
Database Accounts: 198
Network Devices: 87
Cloud API Keys: 127
PASSWORD ROTATION STATUS
Auto-Change Enabled: 1,089 / 1,247 (87.3%)
Rotation Compliant: 1,056 / 1,089 (97.0%)
Heartbeat Healthy: 1,198 / 1,247 (96.1%)
Failed Rotations (30d): 12
SESSION MANAGEMENT
Active Sessions: 23
Recorded Sessions (30d): 4,567
Average Session Length: 22 minutes
Approval Requests (30d): 189 (174 approved, 15 denied)
DISCOVERY RESULTS
Scanned Systems: 2,340
Discovered Accounts: 3,891
Onboarded to Vault: 1,247 (32.1%)
Pending Review: 892
COMPLIANCE
SOX Controls Met: 12/12
PCI-DSS Requirements: 8/8
Password Age Violations: 3 (remediation in progress)| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +41 percentage points is the difference between those two pass rates over the 20 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.