mirror of
https://github.com/BagelHole/DevOps-Security-Agent-Skills.git
synced 2026-08-22 12:49:53 +02:00
513 lines
18 KiB
Markdown
513 lines
18 KiB
Markdown
---
|
|
name: vendor-management
|
|
description: Implement vendor risk management programs. Assess third-party security and maintain vendor inventory. Use when managing supplier security.
|
|
license: MIT
|
|
metadata:
|
|
author: devops-skills
|
|
version: "1.0"
|
|
---
|
|
|
|
# Vendor Management
|
|
|
|
Implement a vendor risk management program covering vendor assessment questionnaires, risk scoring, contract tracking, SLA monitoring, and ongoing oversight for compliance with SOC 2, ISO 27001, and regulatory frameworks.
|
|
|
|
## When to Use
|
|
|
|
- Onboarding new vendors that will access company data or systems
|
|
- Conducting annual vendor risk assessments and reassessments
|
|
- Negotiating security requirements in vendor contracts
|
|
- Monitoring vendor SLA compliance and security posture
|
|
- Preparing vendor management evidence for SOC 2 or ISO 27001 audits
|
|
|
|
## Vendor Risk Tiering
|
|
|
|
```yaml
|
|
vendor_risk_tiers:
|
|
critical:
|
|
criteria:
|
|
- Processes or stores sensitive/regulated data (PII, PHI, PCI)
|
|
- Single point of failure (no alternative vendor)
|
|
- Has privileged access to production systems
|
|
- Handles authentication or security-critical functions
|
|
assessment_requirements:
|
|
- Full security questionnaire (SIG or custom)
|
|
- SOC 2 Type II report review (or equivalent)
|
|
- Penetration test results review
|
|
- On-site or virtual security assessment (optional)
|
|
- Business continuity and DR plan review
|
|
review_frequency: Annual
|
|
contract_requirements:
|
|
- Data processing agreement (DPA)
|
|
- Business associate agreement (BAA) if PHI
|
|
- Security SLA with breach notification timeline
|
|
- Right to audit clause
|
|
- Cyber insurance requirements
|
|
examples:
|
|
- Cloud infrastructure providers (AWS, Azure, GCP)
|
|
- Identity providers (Okta, Azure AD)
|
|
- Payment processors (Stripe, Adyen)
|
|
- Primary database or CRM SaaS
|
|
|
|
high:
|
|
criteria:
|
|
- Accesses significant company data (internal or confidential)
|
|
- Integrates with production systems via API
|
|
- Processes customer-facing transactions
|
|
- Substitution would cause significant business disruption
|
|
assessment_requirements:
|
|
- Security questionnaire
|
|
- SOC 2 report review (Type I or Type II)
|
|
- Compliance certifications verified
|
|
review_frequency: Annual
|
|
contract_requirements:
|
|
- Data processing agreement
|
|
- Security requirements appendix
|
|
- Incident notification clause (72 hours)
|
|
examples:
|
|
- Email/marketing platforms (SendGrid, HubSpot)
|
|
- Monitoring and logging SaaS (Datadog, Splunk)
|
|
- CI/CD platforms (GitHub, GitLab)
|
|
- Customer support platforms
|
|
|
|
medium:
|
|
criteria:
|
|
- Limited data access (internal data only)
|
|
- Non-production system integration
|
|
- Some business impact if unavailable
|
|
assessment_requirements:
|
|
- Abbreviated security questionnaire
|
|
- Compliance certification verification
|
|
review_frequency: Every 2 years
|
|
contract_requirements:
|
|
- Standard vendor terms with security clause
|
|
- NDA
|
|
examples:
|
|
- Project management tools
|
|
- HR platforms
|
|
- Travel and expense systems
|
|
|
|
low:
|
|
criteria:
|
|
- No access to company data
|
|
- No system integration
|
|
- Easily replaceable
|
|
assessment_requirements:
|
|
- Basic due diligence (public info review)
|
|
- Confirm no data sharing
|
|
review_frequency: Every 3 years or on renewal
|
|
contract_requirements:
|
|
- Standard terms
|
|
examples:
|
|
- Office supply vendors
|
|
- Facilities services
|
|
- General consulting (no data access)
|
|
```
|
|
|
|
## Vendor Assessment Questionnaire
|
|
|
|
```yaml
|
|
security_questionnaire:
|
|
section_1_governance:
|
|
questions:
|
|
- "Do you have a documented information security policy?"
|
|
- "Is there a designated CISO or security lead?"
|
|
- "Do you conduct annual security risk assessments?"
|
|
- "Do you have a security awareness training program?"
|
|
- "What compliance certifications do you hold? (SOC 2, ISO 27001, etc.)"
|
|
- "When was your last external security audit?"
|
|
- "Do you carry cyber liability insurance? What coverage limits?"
|
|
evidence_requested:
|
|
- Information security policy (or summary)
|
|
- SOC 2 Type II report (or bridge letter)
|
|
- ISO 27001 certificate
|
|
- Cyber insurance certificate
|
|
|
|
section_2_access_control:
|
|
questions:
|
|
- "How do you manage user access to systems containing our data?"
|
|
- "Is multi-factor authentication enforced for all personnel?"
|
|
- "How frequently do you conduct access reviews?"
|
|
- "What is your process for revoking access upon employee termination?"
|
|
- "Do you support SSO/SAML integration for customer access?"
|
|
- "How do you manage privileged access?"
|
|
evidence_requested:
|
|
- Access management policy
|
|
- MFA configuration documentation
|
|
- Access review records (sample)
|
|
|
|
section_3_data_protection:
|
|
questions:
|
|
- "How is our data encrypted at rest?"
|
|
- "How is our data encrypted in transit?"
|
|
- "In which geographic regions is our data stored?"
|
|
- "Do you use sub-processors? If so, provide a list."
|
|
- "What is your data retention policy?"
|
|
- "How is our data isolated from other customers? (multi-tenancy model)"
|
|
- "Can you provide data export in standard formats upon request?"
|
|
- "What is your data destruction process at contract end?"
|
|
evidence_requested:
|
|
- Encryption standards documentation
|
|
- Sub-processor list
|
|
- Data flow diagram showing customer data handling
|
|
|
|
section_4_vulnerability_management:
|
|
questions:
|
|
- "How frequently do you perform vulnerability scans?"
|
|
- "How frequently do you conduct penetration tests?"
|
|
- "What is your patch management SLA for critical vulnerabilities?"
|
|
- "Do you have a responsible disclosure or bug bounty program?"
|
|
- "How do you manage vulnerabilities in third-party dependencies?"
|
|
evidence_requested:
|
|
- Penetration test executive summary (last 12 months)
|
|
- Vulnerability management policy
|
|
- Patch management SLA documentation
|
|
|
|
section_5_incident_response:
|
|
questions:
|
|
- "Do you have a documented incident response plan?"
|
|
- "What is your breach notification timeline?"
|
|
- "Have you experienced a data breach in the last 3 years?"
|
|
- "How would you notify us in the event of a security incident?"
|
|
- "Do you conduct incident response tabletop exercises?"
|
|
evidence_requested:
|
|
- Incident response plan summary
|
|
- Breach notification procedure
|
|
|
|
section_6_business_continuity:
|
|
questions:
|
|
- "Do you have a business continuity plan?"
|
|
- "Do you have a disaster recovery plan?"
|
|
- "What are your RTO and RPO targets?"
|
|
- "How frequently do you test your DR plan?"
|
|
- "What is your uptime SLA?"
|
|
- "Do you have geographic redundancy?"
|
|
evidence_requested:
|
|
- BCP/DR plan summary
|
|
- Uptime SLA documentation
|
|
- Most recent DR test results
|
|
|
|
section_7_compliance:
|
|
questions:
|
|
- "Do you process data subject to GDPR, HIPAA, or PCI DSS?"
|
|
- "How do you support our compliance obligations?"
|
|
- "Do you have a Data Processing Agreement (DPA) template?"
|
|
- "How do you handle data subject access requests (DSARs)?"
|
|
- "Are you FedRAMP authorized? If so, at what impact level?"
|
|
evidence_requested:
|
|
- DPA template
|
|
- Compliance certification documentation
|
|
```
|
|
|
|
## Risk Scoring Model
|
|
|
|
```yaml
|
|
risk_scoring:
|
|
dimensions:
|
|
data_sensitivity:
|
|
weight: 30
|
|
scores:
|
|
1: "No access to company or customer data"
|
|
2: "Access to public or non-sensitive internal data"
|
|
3: "Access to internal confidential data"
|
|
4: "Access to PII or customer financial data"
|
|
5: "Access to regulated data (PHI, PCI, classified)"
|
|
|
|
system_access:
|
|
weight: 25
|
|
scores:
|
|
1: "No system access"
|
|
2: "Read-only access to non-production"
|
|
3: "Read/write access to non-production or read-only production"
|
|
4: "Read/write access to production systems"
|
|
5: "Privileged/admin access to production or security systems"
|
|
|
|
business_criticality:
|
|
weight: 20
|
|
scores:
|
|
1: "No operational dependency"
|
|
2: "Minor convenience; easily replaced"
|
|
3: "Moderate dependency; replacement in weeks"
|
|
4: "Significant dependency; replacement in months"
|
|
5: "Critical dependency; no viable alternative"
|
|
|
|
security_posture:
|
|
weight: 15
|
|
scores:
|
|
5: "No certifications, no formal security program"
|
|
4: "Some security controls but no external validation"
|
|
3: "SOC 2 Type I or equivalent"
|
|
2: "SOC 2 Type II within last 12 months"
|
|
1: "Multiple certifications (SOC 2 + ISO 27001), strong program"
|
|
|
|
regulatory_exposure:
|
|
weight: 10
|
|
scores:
|
|
1: "No regulatory requirements"
|
|
2: "General data protection (GDPR basic)"
|
|
3: "Industry-specific (HIPAA, PCI)"
|
|
4: "Government (FedRAMP, ITAR)"
|
|
5: "Multiple stringent regulations"
|
|
|
|
calculation:
|
|
formula: "Sum of (dimension_score * dimension_weight) / 100"
|
|
risk_levels:
|
|
low: "Score 1.0 - 2.0"
|
|
medium: "Score 2.1 - 3.0"
|
|
high: "Score 3.1 - 4.0"
|
|
critical: "Score 4.1 - 5.0"
|
|
|
|
example:
|
|
vendor: "Payment Processor X"
|
|
data_sensitivity: 5 # PCI data
|
|
system_access: 4 # Production API integration
|
|
business_criticality: 5 # No alternative
|
|
security_posture: 2 # SOC 2 Type II
|
|
regulatory_exposure: 3 # PCI DSS
|
|
score: "(5*30 + 4*25 + 5*20 + 2*15 + 3*10) / 100 = 4.1 -> Critical"
|
|
```
|
|
|
|
## Vendor Registry and Contract Tracking
|
|
|
|
```yaml
|
|
vendor_registry_schema:
|
|
vendor_info:
|
|
vendor_id: "VND-NNNN"
|
|
vendor_name: ""
|
|
vendor_website: ""
|
|
primary_contact_email: ""
|
|
security_contact_email: ""
|
|
vendor_category: "" # SaaS, IaaS, Consulting, etc.
|
|
|
|
risk_assessment:
|
|
risk_tier: "" # critical, high, medium, low
|
|
risk_score: 0.0
|
|
last_assessment_date: ""
|
|
next_assessment_date: ""
|
|
assessment_status: "" # current, due, overdue
|
|
open_findings: 0
|
|
certifications:
|
|
- type: "SOC 2 Type II"
|
|
valid_until: ""
|
|
report_on_file: true
|
|
- type: "ISO 27001"
|
|
valid_until: ""
|
|
certificate_on_file: true
|
|
|
|
contract:
|
|
contract_id: ""
|
|
start_date: ""
|
|
end_date: ""
|
|
auto_renewal: true
|
|
cancellation_notice_days: 90
|
|
annual_value: 0
|
|
terms:
|
|
data_processing_agreement: true
|
|
nda: true
|
|
baa: false
|
|
right_to_audit: true
|
|
breach_notification_sla: "72 hours"
|
|
data_return_clause: true
|
|
data_destruction_clause: true
|
|
cyber_insurance_required: true
|
|
|
|
data_access:
|
|
data_types: []
|
|
data_classification: ""
|
|
data_location: []
|
|
sub_processors: []
|
|
|
|
sla_tracking:
|
|
uptime_sla: "99.9%"
|
|
actual_uptime_last_month: ""
|
|
support_response_sla: ""
|
|
sla_breaches_ytd: 0
|
|
|
|
status: "" # active, under_review, offboarding, inactive
|
|
owner: "" # Internal team/person responsible
|
|
```
|
|
|
|
## SLA Monitoring
|
|
|
|
```python
|
|
"""
|
|
Vendor SLA monitoring - Track uptime and response time commitments.
|
|
"""
|
|
import requests
|
|
from datetime import datetime, timezone
|
|
|
|
|
|
class VendorSLAMonitor:
|
|
def __init__(self, vendors_config):
|
|
self.vendors = vendors_config
|
|
|
|
def check_uptime(self, vendor):
|
|
"""Check vendor service availability."""
|
|
results = []
|
|
for endpoint in vendor.get("health_endpoints", []):
|
|
try:
|
|
resp = requests.get(
|
|
endpoint["url"],
|
|
timeout=endpoint.get("timeout", 10),
|
|
headers=endpoint.get("headers", {}),
|
|
)
|
|
results.append({
|
|
"endpoint": endpoint["url"],
|
|
"status": resp.status_code,
|
|
"response_time_ms": resp.elapsed.total_seconds() * 1000,
|
|
"healthy": resp.status_code == endpoint.get("expected_status", 200),
|
|
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
})
|
|
except requests.RequestException as e:
|
|
results.append({
|
|
"endpoint": endpoint["url"],
|
|
"status": "error",
|
|
"error": str(e),
|
|
"healthy": False,
|
|
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
})
|
|
return results
|
|
|
|
def check_status_page(self, vendor):
|
|
"""Check vendor status page for active incidents."""
|
|
status_url = vendor.get("status_page_url")
|
|
if not status_url:
|
|
return None
|
|
try:
|
|
api_url = f"{status_url}/api/v2/summary.json"
|
|
resp = requests.get(api_url, timeout=10)
|
|
data = resp.json()
|
|
return {
|
|
"vendor": vendor["name"],
|
|
"status": data.get("status", {}).get("indicator", "unknown"),
|
|
"active_incidents": len(data.get("incidents", [])),
|
|
"components": [
|
|
{"name": c["name"], "status": c["status"]}
|
|
for c in data.get("components", [])
|
|
],
|
|
}
|
|
except Exception:
|
|
return {"vendor": vendor["name"], "status": "unknown"}
|
|
|
|
def generate_sla_report(self, vendor_name, monthly_checks):
|
|
"""Calculate monthly SLA compliance."""
|
|
total = len(monthly_checks)
|
|
healthy = sum(1 for c in monthly_checks if c.get("healthy"))
|
|
uptime_pct = (healthy / total * 100) if total > 0 else 0
|
|
avg_response = (
|
|
sum(c.get("response_time_ms", 0) for c in monthly_checks if c.get("healthy"))
|
|
/ max(healthy, 1)
|
|
)
|
|
return {
|
|
"vendor": vendor_name,
|
|
"period": datetime.now(timezone.utc).strftime("%Y-%m"),
|
|
"total_checks": total,
|
|
"healthy_checks": healthy,
|
|
"uptime_percentage": round(uptime_pct, 3),
|
|
"avg_response_time_ms": round(avg_response, 1),
|
|
"sla_met": uptime_pct >= 99.9,
|
|
}
|
|
```
|
|
|
|
## Vendor Lifecycle Management
|
|
|
|
```yaml
|
|
vendor_lifecycle:
|
|
onboarding:
|
|
step_1_request:
|
|
- Business owner submits vendor request with use case
|
|
- Procurement assigns vendor ID
|
|
- Initial risk tier assessment based on data access and criticality
|
|
|
|
step_2_assess:
|
|
- Send security questionnaire (appropriate to tier)
|
|
- Review compliance certifications
|
|
- Evaluate questionnaire responses
|
|
- Score vendor risk
|
|
|
|
step_3_contract:
|
|
- Negotiate security requirements based on risk tier
|
|
- Execute DPA/BAA as required
|
|
- Document data flows and access scope
|
|
- Set SLA expectations
|
|
|
|
step_4_provision:
|
|
- Configure integration with least privilege access
|
|
- Enable audit logging for vendor access
|
|
- Add to vendor registry
|
|
- Schedule first reassessment
|
|
|
|
ongoing_management:
|
|
monitoring:
|
|
- Track SLA compliance monthly
|
|
- Monitor vendor status pages for incidents
|
|
- Review vendor security advisories
|
|
- Track data sub-processor changes
|
|
reassessment:
|
|
- Conduct reassessment per tier schedule
|
|
- Review updated SOC 2 / ISO 27001 reports
|
|
- Verify certifications are current
|
|
- Update risk score
|
|
|
|
offboarding:
|
|
step_1_plan:
|
|
- Data migration or transition to replacement vendor
|
|
- Identify all integrations and access points
|
|
- Communication plan for stakeholders
|
|
|
|
step_2_execute:
|
|
- Revoke all API keys, credentials, and access
|
|
- Request data return or destruction certificate
|
|
- Remove vendor integrations from systems
|
|
- Disable SSO/SAML connections
|
|
|
|
step_3_verify:
|
|
- Confirm data destruction (written certification)
|
|
- Verify all access revoked
|
|
- Update vendor registry status to inactive
|
|
- Archive vendor records for retention period
|
|
```
|
|
|
|
## Vendor Management Checklist
|
|
|
|
```yaml
|
|
vendor_management_checklist:
|
|
program_setup:
|
|
- [ ] Vendor risk tiering criteria defined
|
|
- [ ] Security questionnaire template created
|
|
- [ ] Risk scoring model documented
|
|
- [ ] Vendor registry established
|
|
- [ ] Onboarding and offboarding procedures documented
|
|
- [ ] Contract security requirements defined per tier
|
|
|
|
ongoing_operations:
|
|
- [ ] All active vendors cataloged in registry
|
|
- [ ] Risk tier assigned to each vendor
|
|
- [ ] Security assessments current (per tier schedule)
|
|
- [ ] Compliance certifications on file and not expired
|
|
- [ ] DPAs/BAAs signed for all vendors handling personal data
|
|
- [ ] SLA monitoring active for critical and high-tier vendors
|
|
- [ ] Sub-processor lists reviewed and tracked
|
|
- [ ] Vendor security incidents tracked and assessed
|
|
|
|
governance:
|
|
- [ ] Vendor management policy approved and published
|
|
- [ ] Roles and responsibilities assigned (owner per vendor)
|
|
- [ ] Assessment findings tracked to remediation
|
|
- [ ] Vendor risk reported to management quarterly
|
|
- [ ] Offboarding includes data destruction verification
|
|
- [ ] Evidence retained for compliance audit (3+ years)
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
- Tier vendors by risk before investing assessment effort: not every vendor needs a full security review
|
|
- Use standardized questionnaires (SIG, CAIQ, or consistent custom template) for comparable assessments
|
|
- Review SOC 2 Type II reports thoroughly, including complementary user entity controls
|
|
- Include right-to-audit clauses in contracts for critical vendors even if you do not exercise them frequently
|
|
- Monitor vendor status pages and set up alerts for outages affecting your services
|
|
- Track sub-processor changes: your vendor's vendor is part of your supply chain risk
|
|
- Maintain a vendor registry as a single source of truth for all vendor relationships
|
|
- Conduct offboarding rigorously: revoke all access and obtain data destruction certificates
|
|
- Score vendor risk quantitatively to enable consistent prioritization and trend analysis
|
|
- Report vendor risk metrics to management quarterly as part of the overall risk management program
|