| name | cloud-compliance-governance |
| description | Guide complet de la conformité et gouvernance cloud — SOC2, PCI-DSS, HIPAA, GDPR, FedRAMP, ISO 27001, AWS Organizations SCP, GCP Organization Policies, Azure Policy, compliance frameworks, audit logging, et reporting |
| domain | ["cybersecurite","cloud","compliance"] |
| tags | ["compliance","governance","soc2","pci-dss","hipaa","gdpr","fedramp","iso-27001","scp","organization-policy","azure-policy","audit-logging"] |
| priority | haute |
📋 Cloud Compliance & Governance — Guide Multi-Cloud
Guide complet des frameworks de conformité cloud, gouvernance multi-compte, et automatisation de la conformité.
1. Frameworks de Conformité Cloud
1.1 Matrice des Frameworks par Provider
| Framework | AWS | GCP | Azure | Focus |
|---|
| SOC 2 | ✓ Artifact | ✓ Compliance Reports | ✓ Service Trust Portal | Contrôles internes |
| PCI-DSS v4 | ✓ (scope limité) | ✓ (GCP PCI) | ✓ (Azure PCI) | Données bancaires |
| HIPAA | ✓ BAA required | ✓ BAA required | ✓ BAA required | Données santé |
| GDPR | ✓ DPA | ✓ DPA | ✓ DPA | Données UE |
| FedRAMP | ✓ GovCloud | ✓ Assured Workloads | ✓ Azure Government | Gouvernement US |
| ISO 27001 | ✓ | ✓ | ✓ | ISMS |
| NIST 800-53 | ✓ GovCloud | ✓ Assured | ✓ Azure Gov | Sécurité fédérale |
| CIS Benchmarks | ✓ | ✓ | ✓ | Hardening |
| HITRUST | ✓ | ✓ | ✓ | Santé |
| IRAP | ✓ Sydney | ✓ | ✓ Australia | Australie |
1.2 Shared Responsibility Model par Framework
┌─────────────────────────────────────────────────────┐
│ CUSTOMER RESPONSIBILITY │
│ SOC2: Politiques, contrôles internes, audits │
│ PCI: Cardholder data, CDE, segmentation │
│ HIPAA: ePHI, BAAs, access controls │
│ GDPR: Data processing, DPIAs, consent │
├─────────────────────────────────────────────────────┤
│ SHARED RESPONSIBILITY │
│ SOC2: Logical/physical security │
│ PCI: Network security, encryption │
│ HIPAA: Encryption, access controls │
│ GDPR: Data processing agreements │
├─────────────────────────────────────────────────────┤
│ CLOUD PROVIDER RESPONSIBILITY │
│ PHYSICAL SECURITY, INFRASTRUCTURE │
│ SOC2: Type II report (controls) │
│ PCI: Attestation of Compliance (AoC) │
│ HIPAA: BAA, physical security │
│ GDPR: Data processor, DPA │
└─────────────────────────────────────────────────────┘
2. SOC 2 dans le Cloud
2.1 Trust Services Criteria
| Catégorie | Critère | Contrôle Cloud |
|---|
| Security | CC6.1 Logical access | IAM, MFA, least privilege |
| Availability | CC7.1 Monitoring | GuardDuty, CloudWatch, Azure Monitor |
| Processing Integrity | CC8.1 Change management | IaC, CI/CD, Config |
| Confidentiality | CC6.6 Encryption | KMS, Secrets Manager, Key Vault |
| Privacy | CC9.1 Privacy notice | Data classification, DLP |
2.2 Evidence Collection Automatisée
DATE=$(date +%Y%m%d)
EVIDENCE_DIR="evidence/soc2-${DATE}"
mkdir -p ${EVIDENCE_DIR}
echo "=== IAM Evidence ==="
aws iam get-account-password-policy > ${EVIDENCE_DIR}/iam-password-policy.json
aws iam list-virtual-mfa-devices > ${EVIDENCE_DIR}/iam-mfa-devices.json
aws iam list-users --query "Users[?PasswordLastUsed!=null]" > ${EVIDENCE_DIR}/iam-active-users.json
echo "=== Logging Evidence ==="
aws cloudtrail describe-trails > ${EVIDENCE_DIR}/cloudtrail-config.json
aws cloudtrail get-trail-status --name <trail> > ${EVIDENCE_DIR}/cloudtrail-status.json
aws guardduty list-detectors > ${EVIDENCE_DIR}/guardduty-status.json
echo "=== Encryption Evidence ==="
aws kms list-keys > ${EVIDENCE_DIR}/kms-keys.json
aws kms list-key-rotations > ${EVIDENCE_DIR}/kms-rotation.json
echo "=== Network Evidence ==="
aws ec2 describe-security-groups --query "SecurityGroups[?IpPermissions[?IpRanges[?CidrIp=='0.0.0.0/0']]]" > ${EVIDENCE_DIR}/sg-public.json
echo "=== Backup Evidence ==="
aws backup list-backup-plans > ${EVIDENCE_DIR}/backup-plans.json
aws backup list-recovery-points-by-backup-vault --backup-vault-name <vault> > ${EVIDENCE_DIR}/recovery-points.json
aws iam list-users --query > /user-list.json
user $(jq -r /user-list.json);
aws iam list-attached-user-policies --user-name > /user-policy-.json
aws iam list-groups-for-user --user-name > /user-groups-.json
3. PCI-DSS v4 dans le Cloud
3.1 Périmètre CDE (Cardholder Data Environment)
PCI-DSS Cloud Requirements:
Requirement 1: Firewall configuration
- AWS: Security Groups, NACL, WAF, Network Firewall
- GCP: VPC Firewall Rules, Cloud Armor
- Azure: NSG, Azure Firewall, WAF
Requirement 2: Default passwords/configs
- CIS benchmarks, hardening baselines
- AWS Config rules, GCP Org Policies, Azure Policy
Requirement 3: Stored CHD protection
- Encryption at rest: KMS, CMEK, CMK
- Tokenization: AWS Tokenization, Azure Tokenization
3.2 Segmentation PCI dans le Cloud
aws ec2 create-vpc --cidr-block 10.1.0.0/16 --tag-specifications 'ResourceType=vpc,Tags=[{Key=Environment,Value=PCI-CDE}]'
aws ec2 create-nat-gateway --subnet-id <subnet-private> --allocation-id <eip>
aws ec2 create-route --route-table-id rtb-private --destination-cidr-block 0.0.0.0/0 --nat-gateway-id nat-xxx
aws ec2 create-vpc-endpoint --vpc-id vpc-pci --service-name com.amazonaws.region.s3
aws ec2 create-vpc-endpoint --vpc-id vpc-pci --service-name com.amazonaws.region.kms
aws ec2 create-vpc-endpoint --vpc-id vpc-pci --service-name com.amazonaws.region.logs
aws cloudtrail create-trail --name pci-trail --s3-bucket-name pci-logs --is-multi-region-trail --enable-log-file-validation
aws cloudtrail start-logging --name pci-trail
aws guardduty create-detector --enable
aws configservice put-config-rule --config-rule file://pci-requirements.json
3.3 PCI ASV Scanning
aws inspector2 enable --resource-types EC2
aws inspector2 list-findings \
--filter-criteria '{"severity": [{"comparison": "EQUALS", "value": "CRITICAL"}]}' \
--query 'findings[].{Title:title, CVEId:cveId, Severity:severity}'
4. HIPAA dans le Cloud
4.1 BAA (Business Associate Agreement)
aws artifact download-document --document-id <hipaa-baa-id>
4.2 Contrôles HIPAA Techniques
HIPAA Security Rule (45 CFR 164):
Administrative Safeguards:
- Security Management Process (164.308(a)(1))
- Assigned Security Responsibility (164.308(a)(2))
- Workforce Security (164.308(a)(3))
- Information Access Management (164.308(a)(4))
- Security Awareness/Training (164.308(a)(5))
- Security Incident Procedures (164.308(a)(6))
- Contingency Plan (164.308(a)(7))
- Evaluation (164.308(a)(8))
- BA agreements (164.308(b)(1))
Physical Safeguards:
- Facility Access Controls (164.310(a)(1))
- Workstation Use/Security (164.310(b)/(c))
- Device/Media Controls
4.3 HIPAA Compliant Architecture
prowler aws -g hipaa -M html
5. GDPR dans le Cloud
5.1 Data Protection Impact Assessment (DPIA)
Éléments requis GDPR:
DPA (Data Processing Agreement):
- Signé avec le provider cloud (AWS/GCP/Azure)
- Standard Contractual Clauses (SCC)
- Data Processor obligations
Data Classification:
- Personal Data (nom, email, téléphone)
- Special Categories (santé, biométrie, politique)
- Pseudonymization vs Anonymization
Data Residency:
- AWS: Region selection (eu-west-1, eu-central-1)
- GCP: Belgium, Frankfurt, London, Zurich
- Azure: France, Germany, Switzerland, UK
Data Retention:
5.2 GDPR Technical Controls
aws organizations create-policy --content file://scp-regions.json --name "DenyNonEU-Regions" --type SERVICE_CONTROL_POLICY
aws kms create-key --description "GDPR Key" --policy file://gdpr-key-policy.json
aws kms enable-key-rotation --key-id <key-id>
aws cloudtrail create-trail --name gdpr-trail --is-multi-region-trail --enable-log-file-validation
aws cloudtrail start-logging --name gdpr-trail
aws s3api put-bucket-lifecycle-configuration --bucket <bucket> --lifecycle-configuration file://lifecycle.json
5.3 Data Subject Access Request (DSAR)
cat > dsar-response.sh << 'EOF'
USER_EMAIL=$1
DATE=$(date +%Y%m%d)
OUTPUT_DIR="dsar/${USER_EMAIL}/${DATE}"
mkdir -p ${OUTPUT_DIR}
echo "=== DSAR Response for ${USER_EMAIL} ==="
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=Username,AttributeValue=${USER_EMAIL} \
--start-time $(date -d '30 days ago' +%s) \
--output json > ${OUTPUT_DIR}/cloudtrail-actions.json
aws iam list-users --query "Users[?UserName=='${USER_EMAIL}']" > ${OUTPUT_DIR}/iam-user.json
aws s3api list-objects --bucket <bucket> --prefix users/${USER_EMAIL}/ > ${OUTPUT_DIR}/s3-objects.json
echo "DSAR data collected in ${OUTPUT_DIR}"
echo "Total size: $(du -sh ${OUTPUT_DIR} | cut -f1)"
EOF
6. AWS Organizations — Governance Multi-Compte
6.1 SCP de Sécurité
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyRootAccessKeys",
"Effect": "Deny",
"Action": ["iam:CreateAccessKey", "iam:UpdateAccessKey", "iam:DeleteAccessKey"],
"Resource": ["arn:aws:iam::*:root"]
},
{
"Sid": "DenyLeavingOrg",
"Effect": "Deny",
"Action": [
"organizations:LeaveOrganization",
"organizations:DeleteOrganization"
],
"Resource": "*"
},
6.2 Structure Organisationnelle Recommandée
root/
├── Security OU
│ ├── Security Audit Account (CloudTrail, GuardDuty)
│ └── Log Archive Account (S3 logs, Config)
├── Infrastructure OU
│ ├── Network Account (Transit Gateway, Firewall)
│ └── Shared Services (AD, DNS, Monitoring)
├── Workloads OU
│ ├── Production OU
│ │ ├── Prod Account 1
│ │ ├── Prod Account 2
│ │ └── ...
│ ├── Staging OU
│ │ ├── Staging Account 1
│ │ └── ...
│ └── Development OU
│ ├── Dev Account 1
│ └── ...
├── Sandbox OU
│ └── (SCP plus permissif)
└── Suspended OU
└── (SCP deny all)
7. GCP Organization Policies
7.1 Policies Essentielles
gcloud resource-manager org-policies set-policy --organization <ORG_ID> \
--policy-file /dev/stdin << 'EOF'
constraint: constraints/iam.allowedPolicyMemberDomains
listPolicy:
allowedValues:
- C0xxxxxxx
EOF
gcloud resource-manager org-policies set-policy --organization <ORG_ID> \
--policy-file /dev/stdin << 'EOF'
constraint: constraints/compute.vmExternalIpAccess
listPolicy:
deny: all
EOF
gcloud resource-manager org-policies set-policy --organization <ORG_ID> \
--policy-file /dev/stdin << 'EOF'
constraint: constraints/storage.uniformBucketLevelAccess
booleanPolicy:
enforced: true
EOF
gcloud resource-manager org-policies set-policy --organization <ORG_ID> \
--policy-file /dev/stdin << 'EOF'
constraint: constraints/iam.automaticIamGrantsForDefaultServiceAccounts
booleanPolicy:
enforced: true
EOF
gcloud resource-manager org-policies set-policy --organization <ORG_ID> \
--policy-file /dev/stdin << 'EOF'
constraint: constraints/compute.requireOsLogin
booleanPolicy:
enforced: true
EOF
gcloud resource-manager org-policies set-policy --organization <ORG_ID> \
--policy-file /dev/stdin << 'EOF'
constraint: constraints/gcp.resourceLocations
listPolicy:
allowedValues:
- europe-west1
- europe-west9
- europe-west10
EOF
8. Azure Policy — Governance
8.1 Initiatives de Sécurité
az policy assignment create \
--name "audit-logs" \
--display-name "Audit Logs Required" \
--policy "AuditDiagnosticSetting" \
--params '{"effect": "AuditIfNotExists"}' \
--scope /subscriptions/<SUB>
az policy assignment create \
--name "deny-ssh-from-internet" \
--display-name "Deny SSH from Internet" \
--policy "StorageAccountPublicAccessShouldBeDisabled" \
--params '{"effect": "Deny"}'
az policy assignment create \
--name "require-encryption" \
--display-name "Require Encryption" \
--policy "AuditUnusedResourcesCostOptimization" \
--params '{"effect": "Audit"}'
9. Audit Logging & Reporting
9.1 Centralisation des Logs
aws cloudtrail create-trail \
--name org-trail \
--s3-bucket-name org-logs-<account> \
--is-organization-trail \
--enable-log-file-validation \
--is-multi-region-trail
gcloud logging sinks create org-sink \
bigquery.googleapis.com/projects/<PROJECT>/datasets/audit \
--organization <ORG_ID> \
--include-children \
--log-filter="severity>=WARNING"
az policy assignment create \
--name "deploy-diag-settings" \
--display-name "Deploy Diagnostic Settings" \
--policy "DeployDiagnosticSettings"
9.2 Compliance Dashboard
echo "=== Compliance Report $(date +%Y-%m-%d) ==="
echo ""
echo "--- AWS Compliance ---"
echo "CIS Score: $(prowler aws -g cis_1.5 -M json | jq '.summary.pass_percentage')"
echo "PCI Findings: $(prowler aws -g pci_3.2.1 -M json | jq '.summary.fail')"
echo "HIPAA Controls: $(prowler aws -g hipaa -M json | jq '.summary.pass')"
echo ""
echo "--- GCP Compliance ---"
echo "CIS Score: $(prowler gcp -p <project> -g cis_1.2 -M json | jq '.summary.pass_percentage')"
echo ""
echo "--- Azure Compliance ---"
echo "Secure Score: $(az security secure-score list --query [].currentScore --output tsv)"
echo "Defender Score: $(az security pricing list --query '[].{Name:name, Tier:tier}' --output table)"
10. Outils de Conformité Cloud
| Outil | Frameworks | Description |
|---|
| Prowler | CIS, PCI, HIPAA, NIST | Cloud compliance scanning |
| Checkov | CIS, PCI, HIPAA, SOC2 | IaC compliance scanning |
| ScoutSuite | CIS, custom | Cloud config audit |
| CloudSploit | CIS, custom | Cloud security scanning |
| Terraform Sentinel | Custom | Policy as code |
| OPA (Rego) | Custom | Policy engine |
| Kyverno | K8s security | K8s policy engine |
| OpenSCAP | SCAP, CIS | System compliance |
| InSpec | SOC2, PCI, CIS | Compliance as code |
| Lynis | CIS, custom | System hardening audit |
Pitfalls
- Ne PAS confondre certification du provider et votre propre conformité — le modèle de responsabilité partagée s'applique
- Ne PAS importer des données sensibles sans vérifier le BAA/DPA d'abord
- TOUJOURS documenter les exceptions de conformité avec justification
- TOUJOURS automatiser la collecte d'évidences (ne pas attendre l'audit)
- Les SCP trop restrictives peuvent bloquer des pipelines CI/CD — tester dans une OU sandbox
- Chaque framework a des exigences de logging spécifiques — vérifier les rétentions
- Les audits cloud nécessitent des accès read-only pour les auditeurs — configurer correctement
- Les données de logs contiennent des PII — activer la redaction des champs sensibles
Ressources