From glba
Generates comprehensive evidence collection checklists for Gramm-Leach-Bliley Act (GLBA) Safeguards Rule and Privacy Rule compliance for financial institutions.
npx claudepluginhub abnejllc/grc --plugin glba# GLBA Evidence Checklist Generates comprehensive evidence collection checklists for Gramm-Leach-Bliley Act (GLBA) Safeguards Rule and Privacy Rule compliance for financial institutions. > **Never commit evidence artifacts to source control.** The outputs below include real usernames, credential reports, MFA device states, and privileged-account inventories. `.gitignore` covers `evidence/` by default so `git add -A` will not sweep it up, but durable storage is your responsibility. Use an encrypted, access-controlled evidence locker (encrypted S3 with least-privilege IAM, a GRC platform, o...
/evidence-checklistGenerates evidence preparation checklists for compliance frameworks like NIST, FedRAMP, SOC2, ISO27001 based on controls and optional audit type.
/evidence-checklistGenerates StateRAMP evidence checklists for NIST 800-53 control families, supporting moderate/high baselines and markdown/JSON/CSV export.
/evidence-checklistGenerates evidence checklists for EU DORA articles or topics, tailored to financial entity types like credit institutions, exportable as markdown, JSON, or CSV.
/evidence-checklistGenerates evidence collection checklists for GLBA Safeguards Rule and Privacy Rule compliance by rule section, institution type (bank, broker, insurer), and export format (markdown, json, csv).
/evidence-checklistGenerates detailed SOC 2 evidence checklists for control IDs, categories, or security areas, including policies, procedures, and automated/manual collection guidance for Type 1/2 audits.
/evidence-checklistGenerates CMMC 2.0 evidence checklists for practices by ID or domain, organized by level (1-3) and maturity requirements with DoD contractor guidance. Supports --level and --export flags.
Generates comprehensive evidence collection checklists for Gramm-Leach-Bliley Act (GLBA) Safeguards Rule and Privacy Rule compliance for financial institutions.
Never commit evidence artifacts to source control. The outputs below include real usernames, credential reports, MFA device states, and privileged-account inventories.
.gitignorecoversevidence/by default sogit add -Awill not sweep it up, but durable storage is your responsibility. Use an encrypted, access-controlled evidence locker (encrypted S3 with least-privilege IAM, a GRC platform, or a shared drive with full-disk encryption and MFA-gated access).
/glba:evidence-checklist <rule-section> [--institution-type <bank|broker|insurer>] [--export <format>]
<rule-section>: GLBA section (e.g., "Safeguards Rule", "Privacy Rule", "§314.4(b)") or topic (e.g., "Information Security Program", "Customer Privacy Notices")--institution-type: Type of financial institution (bank, broker, insurer, other). Default: bank--export: Export format (json, csv, markdown). Default: markdown/glba:evidence-checklist "Safeguards Rule" --institution-type bank
Output:
GLBA Evidence Checklist
Regulation: Safeguards Rule (16 CFR Part 314)
Institution Type: Bank / Credit Union
Regulator: FTC (Federal Trade Commission) / FDIC / OCC / NCUA (depending on charter)
Effective Date: December 9, 2022 (amended rule)
Penalties: Up to $46,517 per violation per day
## Safeguards Rule Requirements
The Safeguards Rule requires financial institutions to develop, implement, and maintain a comprehensive information security program that contains administrative, technical, and physical safeguards to protect customer information.
### Core Requirements (§314.4)
1. **Qualified Individual** - Designate qualified individual to oversee information security program
2. **Risk Assessment** - Conduct periodic risk assessments
3. **Safeguards Design** - Design and implement safeguards to control identified risks
4. **Monitoring and Testing** - Regular monitoring and testing of safeguards
5. **Training** - Security awareness training for personnel
6. **Service Provider Oversight** - Due diligence and contractual protections for service providers
7. **Change Management** - Evaluate and adjust program based on monitoring, testing, changes
8. **Incident Response** - Written incident response plan
9. **Reporting to Board** - Annual report to board of directors or equivalent
## Evidence Requirements
### Required Documentation
□ **Written Information Security Program (WISP)**
- Comprehensive documentation of information security program
- Required elements per §314.4(a):
- Designated Qualified Individual
- Risk assessment procedures
- Safeguards to control risks
- Monitoring and testing program
- Personnel training program
- Service provider oversight
- Change management procedures
- Incident response plan
- Update frequency: Annually or when material changes
- Approver: Board of Directors or Senior Officer
- Evidence: Board-approved WISP v1.x with meeting minutes
□ **Qualified Individual Designation**
- Written designation of Qualified Individual (§314.4(a))
- Name, title, qualifications
- Responsibilities and authority
- Evidence: Designation letter, organizational chart
- Frequency: Annual review
□ **Risk Assessment (Annual)**
- Comprehensive assessment of risks to customer information (§314.4(b))
- Required elements:
- Criteria for evaluating and categorizing identified security risks or threats
- Criteria for assessing confidentiality, integrity, availability of customer information
- Requirements describing how identified risks will be mitigated or accepted
- Periodic risk assessments (at least annually)
- Evidence: Annual Risk Assessment Report (signed by Qualified Individual)
- Frequency: Annually minimum
□ **Safeguards Documentation (§314.4(c))**
- Access controls (user authentication, access rights)
- Encryption of customer information at rest (if feasible)
- Encryption of customer information in transit
- Secure development practices
- Multi-factor authentication (MFA) for accessing customer information
- Disposal procedures for customer information
- Change management procedures
- Evidence: Technical safeguards documentation, policies
□ **Monitoring and Testing Program (§314.4(d))**
- Continuous monitoring or periodic penetration testing
- Periodic vulnerability assessments (at least annually)
- Annual penetration testing
- Evidence: Monitoring dashboards, vulnerability scan reports, penetration test reports
- Frequency: Continuous (monitoring), annually (vulnerability assessments + penetration tests)
□ **Personnel Training Program (§314.4(e))**
- Security awareness training for all personnel
- Required topics: Safeguards Rule requirements, customer information handling, incident reporting
- Evidence: Training materials, completion records, attendance logs
- Frequency: Annually, on hire for new employees
□ **Service Provider Oversight (§314.4(f))**
- Due diligence before engaging service provider
- Contracts requiring safeguards for customer information
- Periodic assessments of service providers
- Evidence: Service provider inventory, due diligence reports, contracts with security clauses
- Frequency: Before engagement, annual review
□ **Incident Response Plan (§314.4(h))**
- Written plan for responding to security events
- Required elements:
- Goals of incident response plan
- Internal processes for responding to incidents
- Clear roles, responsibilities, decision-making authority
- External and internal communications and information sharing
- Incident containment and mitigation
- Documentation and reporting requirements
- Evaluation and revision following incidents
- Evidence: Incident Response Plan v1.x
- Frequency: Annual review, update after incidents
□ **Annual Report to Board of Directors (§314.4(i))**
- Written report to board (or equivalent) at least annually
- Required content:
- Overall status of information security program
- Compliance with Safeguards Rule
- Material matters related to program (risk assessment, assessments, incidents)
- Evidence: Annual Board Report, Board meeting minutes acknowledging report
- Frequency: Annually
### Automated Evidence Collection
✓ **Encryption at Rest Evidence (§314.4(c)(3))**
```bash
# AWS - S3 bucket encryption (customer data)
aws s3api list-buckets --output json | jq -r '.Buckets[].Name' | while read bucket; do
encryption=$(aws s3api get-bucket-encryption --bucket "$bucket" 2>&1)
if echo "$encryption" | grep -q "ServerSideEncryptionConfigurationNotFoundError"; then
echo "$bucket,NOT ENCRYPTED" >> evidence/glba-s3-encryption-$(date +%Y%m%d).csv
else
echo "$bucket,ENCRYPTED" >> evidence/glba-s3-encryption-$(date +%Y%m%d).csv
fi
done
# RDS encryption
aws rds describe-db-instances \
--query 'DBInstances[].[DBInstanceIdentifier,StorageEncrypted,KmsKeyId]' \
--output json > evidence/glba-rds-encryption-$(date +%Y%m%d).json
# EBS volumes (ensure customer data volumes encrypted)
aws ec2 describe-volumes \
--filters "Name=tag:DataClassification,Values=CustomerInformation" \
--query 'Volumes[].[VolumeId,Encrypted,KmsKeyId]' \
--output json > evidence/glba-ebs-encryption-$(date +%Y%m%d).json
Collection Frequency: Monthly Retention: 5 years (typical financial services record retention) Purpose: Demonstrates encryption at rest per §314.4(c)(3)
✓ Encryption in Transit Evidence (§314.4(c)(4))
# Application Load Balancer - HTTPS enforcement
aws elbv2 describe-load-balancers --output json | \
jq '.LoadBalancers[] | {Name: .LoadBalancerName, Scheme: .Scheme}' \
> evidence/glba-alb-$(date +%Y%m%d).json
# Check for HTTP listeners (should redirect to HTTPS)
aws elbv2 describe-listeners --load-balancer-arn <ARN> | \
jq '.Listeners[] | select(.Protocol == "HTTP" and .DefaultActions[].Type != "redirect")' \
> evidence/glba-http-non-redirect-$(date +%Y%m%d).json
# CloudFront TLS versions (must be TLS 1.2+)
aws cloudfront list-distributions \
--query 'DistributionList.Items[].[Id,ViewerCertificate.MinimumProtocolVersion]' \
--output json > evidence/glba-cloudfront-tls-$(date +%Y%m%d).json
Collection Frequency: Monthly Retention: 5 years Purpose: Demonstrates encryption in transit per §314.4(c)(4)
✓ Multi-Factor Authentication Evidence (§314.4(c)(6))
# IAM Credential Report - MFA status
aws iam generate-credential-report
aws iam get-credential-report --output text | base64 -d \
> evidence/glba-iam-credential-report-$(date +%Y%m%d).csv
# Users without MFA (non-compliant)
aws iam get-credential-report --output text | base64 -d | \
awk -F',' '$4 == "true" && $8 == "false" {print $1}' \
> evidence/glba-no-mfa-$(date +%Y%m%d).txt
# Count MFA compliance
total_users=$(aws iam get-credential-report --output text | base64 -d | tail -n +2 | wc -l)
mfa_users=$(aws iam get-credential-report --output text | base64 -d | awk -F',' '$8 == "true"' | wc -l)
echo "MFA Compliance: $mfa_users / $total_users users" > evidence/glba-mfa-summary-$(date +%Y%m%d).txt
Collection Frequency: Weekly Retention: 5 years Purpose: MFA requirement per §314.4(c)(6)
✓ Access Controls Evidence (§314.4(c)(1-2))
# IAM policies - least privilege review
aws iam list-policies --scope Local --output json \
> evidence/glba-iam-policies-$(date +%Y%m%d).json
# Users with AdministratorAccess (should be minimal)
for user in $(aws iam list-users --query 'Users[].UserName' --output text); do
policies=$(aws iam list-attached-user-policies --user-name "$user" --query 'AttachedPolicies[?PolicyName==`AdministratorAccess`]')
if [ "$policies" != "[]" ]; then
echo "$user has AdministratorAccess" >> evidence/glba-admin-users-$(date +%Y%m%d).txt
fi
done
# Security groups allowing 0.0.0.0/0 access (potential risk)
aws ec2 describe-security-groups \
--filters "Name=ip-permission.cidr,Values=0.0.0.0/0" \
--query 'SecurityGroups[].[GroupId,GroupName,IpPermissions[?IpRanges[?CidrIp==`0.0.0.0/0`]]]' \
--output json > evidence/glba-open-security-groups-$(date +%Y%m%d).json
Collection Frequency: Monthly Retention: 5 years Purpose: Access controls per §314.4(c)(1-2)
✓ Vulnerability Assessment Evidence (§314.4(d)(2))
# AWS Inspector findings
aws inspector2 list-findings \
--filter-criteria '{"severity":[{"comparison":"EQUALS","value":"CRITICAL"},{"comparison":"EQUALS","value":"HIGH"}]}' \
--max-results 1000 \
--output json > evidence/glba-inspector-findings-$(date +%Y%m%d).json
# Security Hub findings
aws securityhub get-findings \
--filters '{"SeverityLabel":[{"Value":"CRITICAL","Comparison":"EQUALS"},{"Value":"HIGH","Comparison":"EQUALS"}],"RecordState":[{"Value":"ACTIVE","Comparison":"EQUALS"}]}' \
--max-results 100 \
--output json > evidence/glba-securityhub-findings-$(date +%Y%m%d).json
# Summarize vulnerability count
critical_count=$(aws inspector2 list-findings --filter-criteria '{"severity":[{"comparison":"EQUALS","value":"CRITICAL"}]}' --query 'findings | length(@)')
high_count=$(aws inspector2 list-findings --filter-criteria '{"severity":[{"comparison":"EQUALS","value":"HIGH"}]}' --query 'findings | length(@)')
echo "Critical: $critical_count, High: $high_count" > evidence/glba-vulnerability-summary-$(date +%Y%m%d).txt
Collection Frequency: Weekly Retention: 5 years Purpose: Vulnerability assessments per §314.4(d)(2)
✓ Monitoring Evidence (§314.4(d)(1))
# CloudWatch alarms configured (continuous monitoring)
aws cloudwatch describe-alarms --output json \
> evidence/glba-cloudwatch-alarms-$(date +%Y%m%d).json
# GuardDuty findings (threat detection)
aws guardduty list-findings \
--detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
--finding-criteria '{"Criterion":{"severity":{"Gte":7}}}' \
--output json > evidence/glba-guardduty-findings-$(date +%Y%m%d).json
# CloudTrail enabled (audit logging)
aws cloudtrail describe-trails --output json \
> evidence/glba-cloudtrail-status-$(date +%Y%m%d).json
Collection Frequency: Monthly summary Retention: 5 years Purpose: Continuous monitoring per §314.4(d)(1)
✓ Secure Disposal Evidence (§314.4(c)(7))
# S3 lifecycle policies (automated deletion)
aws s3api list-buckets --output json | jq -r '.Buckets[].Name' | while read bucket; do
lifecycle=$(aws s3api get-bucket-lifecycle-configuration --bucket "$bucket" 2>&1)
if echo "$lifecycle" | grep -q "NoSuchLifecycleConfiguration"; then
echo "$bucket,NO LIFECYCLE POLICY" >> evidence/glba-lifecycle-policies-$(date +%Y%m%d).csv
else
echo "$bucket,HAS LIFECYCLE POLICY" >> evidence/glba-lifecycle-policies-$(date +%Y%m%d).csv
fi
done
Collection Frequency: Quarterly Retention: 5 years Purpose: Disposal procedures per §314.4(c)(7)
□ Annual Risk Assessment
□ Annual Penetration Test (§314.4(d)(3))
□ Security Awareness Training Records
□ Service Provider Due Diligence (§314.4(f))
□ Service Provider Contracts
□ Annual Board Report (§314.4(i))
□ Incident Log
Regulators (FTC, FDIC, OCC, NCUA) will verify:
✓ Written Information Security Program (WISP) exists and is comprehensive ✓ Qualified Individual designated in writing ✓ Annual risk assessments performed (documented) ✓ Safeguards documented for all identified risks ✓ Monitoring and testing program documented ✓ Training program documented ✓ Service provider oversight documented ✓ Incident response plan documented ✓ Annual Board reports submitted and reviewed
✓ Encryption at rest for customer information ✓ Encryption in transit (TLS 1.2+ for all customer data transmission) ✓ MFA implemented for accessing customer information ✓ Access controls (least privilege, user authentication) ✓ Secure disposal procedures ✓ Change management process ✓ Service provider contracts include required security clauses
✓ Annual penetration testing performed ✓ Vulnerability assessments performed (at least annually) ✓ Continuous monitoring or periodic testing in place ✓ Incident response plan tested ✓ Training completion records (100% of staff)
❌ No Written Information Security Program (WISP) ❌ No Qualified Individual designated ❌ No annual risk assessment performed ❌ No encryption of customer information at rest or in transit ❌ No multi-factor authentication for accessing customer information ❌ No annual penetration testing ❌ No annual Board report
⚠️ WISP incomplete (missing required elements) ⚠️ Risk assessment not performed annually ⚠️ Some customer information not encrypted ⚠️ MFA not enforced for all access to customer information ⚠️ Service provider contracts missing required security clauses ⚠️ Penetration test >12 months old ⚠️ Incident response plan not tested
⚠️ WISP not reviewed in last 12 months ⚠️ Training completion not 100% ⚠️ Service provider assessments not performed annually ⚠️ Monitoring dashboards incomplete
Timeline: 6-8 weeks Priority: 🔴 CRITICAL (foundational requirement)
Timeline: 8-10 weeks Priority: 🔴 CRITICAL (§314.4(c)(6) requirement)
Timeline: 12-14 weeks Priority: 🔴 CRITICAL (§314.4(d)(3) requirement)
evidence/
└── glba-safeguards-rule/
├── wisp/
│ ├── wisp-v1.2-board-approved.pdf
│ ├── qualified-individual-designation.pdf
│ └── board-approval-minutes-2024-01-15.pdf
├── risk-assessments/
│ ├── risk-assessment-2024.pdf
│ ├── risk-assessment-2023.pdf
│ └── risk-register-master.xlsx
├── safeguards/
│ ├── encryption-at-rest-policy.pdf
│ ├── encryption-in-transit-policy.pdf
│ ├── mfa-policy.pdf
│ ├── access-control-policy.pdf
│ └── evidence/ (automated monthly evidence)
├── monitoring-testing/
│ ├── penetration-test-2024.pdf
│ ├── vulnerability-scans/ (monthly)
│ ├── monitoring-dashboards-screenshots.pdf
│ └── remediation-tracker.xlsx
├── training/
│ ├── training-materials-2024.pdf
│ ├── completion-records-2024.xlsx
│ └── attendance-registers/
├── service-providers/
│ ├── service-provider-inventory.xlsx
│ ├── due-diligence-reports/
│ ├── contracts/
│ └── annual-assessments/
├── incident-response/
│ ├── incident-response-plan-v1.1.pdf
│ ├── incident-log-master.xlsx
│ └── incident-investigations/
├── board-reports/
│ ├── annual-board-report-2024.pdf
│ ├── board-minutes-2024-12-15.pdf
│ └── ... (annual reports + minutes)
└── README.md (evidence index, 5-year retention)
#!/usr/bin/env python3
"""
GLBA Safeguards Rule Evidence Collection
For financial institutions subject to FTC Safeguards Rule
"""
import boto3
import json
import csv
from datetime import datetime
import os
class GLBASafeguardsEvidence:
def __init__(self, output_dir="evidence/glba-safeguards-rule"):
self.output_dir = output_dir
self.timestamp = datetime.now().strftime("%Y%m%d")
os.makedirs(f"{output_dir}/safeguards/evidence", exist_ok=True)
def check_encryption_at_rest(self):
"""Check encryption at rest (§314.4(c)(3))"""
print("Checking encryption at rest compliance...")
s3 = boto3.client('s3')
rds = boto3.client('rds')
# S3 encryption
buckets = s3.list_buckets()['Buckets']
s3_results = []
for bucket in buckets:
bucket_name = bucket['Name']
try:
encryption = s3.get_bucket_encryption(Bucket=bucket_name)
s3_results.append({'bucket': bucket_name, 'encrypted': True})
except:
s3_results.append({'bucket': bucket_name, 'encrypted': False})
# RDS encryption
rds_instances = rds.describe_db_instances()['DBInstances']
rds_results = []
for instance in rds_instances:
rds_results.append({
'instance': instance['DBInstanceIdentifier'],
'encrypted': instance.get('StorageEncrypted', False)
})
# Save evidence
with open(f"{self.output_dir}/safeguards/evidence/s3-encryption-{self.timestamp}.json", 'w') as f:
json.dump(s3_results, f, indent=2)
with open(f"{self.output_dir}/safeguards/evidence/rds-encryption-{self.timestamp}.json", 'w') as f:
json.dump(rds_results, f, indent=2)
s3_encrypted = len([r for r in s3_results if r['encrypted']])
rds_encrypted = len([r for r in rds_results if r['encrypted']])
print(f"✓ S3 buckets: {s3_encrypted}/{len(s3_results)} encrypted")
print(f"✓ RDS instances: {rds_encrypted}/{len(rds_instances)} encrypted")
return {'s3': s3_results, 'rds': rds_results}
def check_mfa_compliance(self):
"""Check MFA enforcement (§314.4(c)(6))"""
print("Checking MFA compliance...")
iam = boto3.client('iam')
# Generate credential report
iam.generate_credential_report()
report = iam.get_credential_report()
# Parse for MFA status
users_without_mfa = []
total_users = 0
for line in csv.DictReader(report['Content'].decode('utf-8').splitlines()):
if line.get('password_enabled') == 'true':
total_users += 1
if line.get('mfa_active') == 'false':
users_without_mfa.append({
'user': line['user'],
'password_last_used': line.get('password_last_used')
})
# Save evidence
with open(f"{self.output_dir}/safeguards/evidence/mfa-compliance-{self.timestamp}.json", 'w') as f:
json.dump({
'total_users': total_users,
'mfa_enabled': total_users - len(users_without_mfa),
'mfa_disabled': len(users_without_mfa),
'compliance_percentage': (total_users - len(users_without_mfa)) / total_users * 100 if total_users > 0 else 0,
'users_without_mfa': users_without_mfa
}, f, indent=2)
print(f"✓ MFA compliance: {total_users - len(users_without_mfa)}/{total_users} users ({(total_users - len(users_without_mfa)) / total_users * 100:.1f}%)")
if len(users_without_mfa) > 0:
print(f"⚠️ WARNING: {len(users_without_mfa)} users without MFA (§314.4(c)(6) non-compliant)")
return users_without_mfa
def check_vulnerability_findings(self):
"""Check vulnerability assessment results (§314.4(d)(2))"""
print("Checking vulnerability assessment compliance...")
inspector = boto3.client('inspector2')
# Get critical and high findings
findings = inspector.list_findings(
filterCriteria={
'severity': [
{'comparison': 'EQUALS', 'value': 'CRITICAL'},
{'comparison': 'EQUALS', 'value': 'HIGH'}
]
},
maxResults=1000
)
# Save evidence
with open(f"{self.output_dir}/safeguards/evidence/vulnerability-findings-{self.timestamp}.json", 'w') as f:
json.dump(findings, f, indent=2, default=str)
finding_count = len(findings.get('findings', []))
print(f"✓ Critical/High vulnerabilities: {finding_count}")
if finding_count > 0:
print(f"⚠️ ACTION REQUIRED: Remediate {finding_count} critical/high vulnerabilities")
return finding_count
def generate_compliance_report(self, encryption_results, mfa_results, vuln_count):
"""Generate GLBA Safeguards Rule compliance summary"""
s3_compliant = all(r['encrypted'] for r in encryption_results['s3'])
rds_compliant = all(r['encrypted'] for r in encryption_results['rds'])
mfa_compliant = len(mfa_results) == 0
report = f"""
GLBA Safeguards Rule Compliance Report
Generated: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
Regulation: 16 CFR Part 314
ENCRYPTION AT REST (§314.4(c)(3))
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S3 Buckets: {len([r for r in encryption_results['s3'] if r['encrypted']])}/{len(encryption_results['s3'])} encrypted {'✓ COMPLIANT' if s3_compliant else '✗ NON-COMPLIANT'}
RDS Databases: {len([r for r in encryption_results['rds'] if r['encrypted']])}/{len(encryption_results['rds'])} encrypted {'✓ COMPLIANT' if rds_compliant else '✗ NON-COMPLIANT'}
MULTI-FACTOR AUTHENTICATION (§314.4(c)(6))
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MFA Compliance: {'✓ COMPLIANT - All users have MFA' if mfa_compliant else f'✗ NON-COMPLIANT - {len(mfa_results)} users without MFA'}
VULNERABILITY ASSESSMENTS (§314.4(d)(2))
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Critical/High: {vuln_count} findings {'⚠️ Remediation required' if vuln_count > 0 else '✓ No critical/high findings'}
OVERALL COMPLIANCE STATUS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{'✓ COMPLIANT' if s3_compliant and rds_compliant and mfa_compliant and vuln_count == 0 else '✗ NON-COMPLIANT - Remediation Required'}
REQUIRED ACTIONS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
"""
if not s3_compliant:
report += "□ Enable S3 encryption for all buckets with customer information\n"
if not rds_compliant:
report += "□ Enable RDS encryption for all databases with customer information\n"
if not mfa_compliant:
report += f"□ Enable MFA for {len(mfa_results)} IAM users\n"
if vuln_count > 0:
report += f"□ Remediate {vuln_count} critical/high vulnerabilities\n"
report += """
ANNUAL REQUIREMENTS REMINDER
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ Annual risk assessment (§314.4(b))
□ Annual penetration test (§314.4(d)(3))
□ Annual vulnerability assessment (§314.4(d)(2))
□ Annual Board report (§314.4(i))
□ Annual security awareness training (§314.4(e))
Evidence Location: {self.output_dir}/safeguards/evidence/
Retention: 5 years (financial services standard)
"""
report_file = f"{self.output_dir}/compliance-report-{self.timestamp}.txt"
with open(report_file, 'w') as f:
f.write(report)
print(f"\n{report}")
return report_file
if __name__ == "__main__":
print("GLBA Safeguards Rule Evidence Collection")
print("=" * 70)
print("Regulation: 16 CFR Part 314 (Amended December 9, 2022)")
print("=" * 70)
collector = GLBASafeguardsEvidence()
encryption_results = collector.check_encryption_at_rest()
mfa_results = collector.check_mfa_compliance()
vuln_count = collector.check_vulnerability_findings()
collector.generate_compliance_report(encryption_results, mfa_results, vuln_count)
print("\n✓ GLBA evidence collection complete")
print("⚠️ REMINDER: Annual penetration test and Board report required")
GLBA Regulation: 16 CFR Part 314 (Safeguards Rule) Regulator: FTC, FDIC, OCC, NCUA, SEC (depending on institution type) Effective Date: December 9, 2022 (amended rule) Penalties: Up to $46,517 per violation per day Evidence Retention: 5 years (financial services standard) Priority: 🔴 CRITICAL (US financial institutions)