{
  "title": "How to Use AWS/Azure/GCP to Store Cryptographically Protected Passwords in Compliance with NIST SP 800-171 REV.2 / CMMC 2.0 Level 2 - Control - IA.L2-3.5.10",
  "date": "2026-04-06",
  "author": "Lakeridge Technologies",
  "featured_image": "/assets/images/blog/2026/4/how-to-use-awsazuregcp-to-store-cryptographically-protected-passwords-in-compliance-with-nist-sp-800-171-rev2-cmmc-20-level-2-control-ial2-3510.jpg",
  "content": {
    "full_html": "<p>This post explains how small businesses and practitioners can use AWS, Azure, and GCP to store user and service credentials with cryptographic protections that meet NIST SP 800-171 Rev.2 and CMMC 2.0 Level 2 Control IA.L2-3.5.10, focusing on practical implementation, concrete cloud-native choices, and the operational evidence you’ll need for compliance.</p>\n\n<h2>Understanding the requirement (Compliance Framework, Practice, and Objectives)</h2>\n<p>NIST SP 800-171 / CMMC IA.L2-3.5.10 requires that credentials are protected using cryptographic mechanisms to prevent unauthorized disclosure and misuse. The key objectives are: (1) ensure passwords and secrets are not stored in plaintext or weakly protected forms, (2) ensure cryptographic operations use approved algorithms and validated modules where applicable, and (3) provide evidence of controls, configuration, and logging. Implementation notes for your Compliance Framework: document the chosen algorithms, key management approach, identity provider configuration, and operational procedures for key rotation, access control, and audit logging.</p>\n\n<h2>Cloud-native options: AWS, Azure, and GCP</h2>\n\n<h3>AWS</h3>\n<p>AWS options include using managed identity services (Amazon Cognito) or implementing your own authentication backed by RDS/DynamoDB with cryptographically hashed passwords. For key material and \"pepper\" storage, use AWS KMS (Customer Managed Keys) or CloudHSM for FIPS-validated HSMs. Use Secrets Manager or Parameter Store to hold service credentials (rotated) — but remember user passwords should be hashed (not reversible) in your database; Secrets Manager is for service/user API keys, not primary user password hashes. Enable CloudTrail and KMS key policies with least privilege, and enable automatic key rotation on CMKs if required by policy.</p>\n\n<h3>Azure</h3>\n<p>Azure provides Azure AD B2C (for consumer/user identity) or you can use a custom auth stack with Azure Key Vault for key material and Azure SQL/Key Vault integration. Use Key Vault Managed HSM if you need FIPS 140-2 L2/L3 assurances. For small businesses, Azure AD B2C offloads password storage and hashing to Microsoft-managed services that meet many compliance needs; if you manage passwords yourself, store only salted, memory-hard hashes in your database and keep any global secret/pepper encrypted in Key Vault with RBAC restricted to the application identity.</p>\n\n<h3>GCP</h3>\n<p>GCP's Identity Platform is the managed route; otherwise, use Cloud KMS / Cloud HSM and Secret Manager. For storing hashed passwords use Firestore/Cloud SQL and protect backups using Customer-Managed Encryption Keys (CMEK) in Cloud KMS. Use IAM conditions to narrowly scope which service accounts can decrypt keys, and enable Cloud Audit Logs to provide the event history auditors will want to see for access to key material and secret decryption operations.</p>\n\n<h2>Best practices for password storage and cryptography</h2>\n<p>Do not store plaintext passwords. Use a modern memory- and CPU-hard password hashing function (Argon2id is recommended; bcrypt is acceptable; PBKDF2-HMAC-SHA256 with sufficiently high iteration counts is a fallback). Use a unique per-password salt (minimum 16 random bytes) and a global pepper stored and rotated in your KMS/HSM. Example parameters you might start from (adjust for your environment): Argon2id with time cost 2–4, memory 64–256 MB per hash, parallelism 1–4; for bcrypt, cost 12–14. Ensure salts are stored alongside the hash in the database and the pepper is never persisted in the DB but retrieved at runtime via a KMS call. Also enforce TLS 1.2/1.3 for all in-transit operations and apply envelope encryption for backups (DB snapshots encrypted with CMEK/CMK).</p>\n\n<h2>Implementation steps and small-business scenarios</h2>\n<p>Step-by-step, a practical implementation for a small e-commerce site: (1) Prefer a managed identity provider (Cognito, Azure AD B2C, or Identity Platform) to reduce scope; (2) If self-managing, implement Argon2id password hashing in your application, store hash+salt in your DB, and store a pepper in KMS; (3) Configure KMS key policies to allow only the application runtime role to decrypt the pepper; (4) Protect DB backups with envelope encryption using a CMK; (5) Enable audit logging (CloudTrail/Monitor/Audit Logs) and retain logs per your policy for evidence. A concrete example: a small shop on AWS uses Cognito for customer sign-in (minimized scope), and for employees uses an internal app that hashes passwords with Argon2id and stores a pepper in an AWS KMS CMK with rotation enabled and CloudTrail logging to an S3 audit bucket with access logged and restricted.</p>\n\n<h2>Compliance evidence, operational controls, and configuration</h2>\n<p>For NIST/CMMC evidence, collect: architecture diagrams showing where hashing occurs and where keys are stored, configuration screenshots (Key Vault/KMS policies, CMK rotation schedule), parameterized hashing settings, access control lists for KMS/Key Vault/Secret Manager, audit logs showing key use and secret access, and test results that validate algorithms and configurations. If you rely on a managed identity provider, include its compliance documentation and the controls you configured (e.g., MFA, sign-in policies). Also document your incident response and credential compromise plan, password policy, and periodic review schedule.</p>\n\n<h2>Risks of not implementing correctly</h2>\n<p>If you fail to cryptographically protect passwords properly, risks include credential theft via database breach, credential stuffing across other services, privilege escalation, lateral movement within your environment, regulatory penalties, loss of DoD/prime contracts (for contractors handling CUI), and reputational damage. Weak hashing parameters or exposed peppers/keys dramatically reduce the work factor for attackers; lack of logging or key access controls inhibits your ability to detect breaches and produce compliance evidence.</p>\n\n<h2>Summary</h2>\n<p>Meeting IA.L2-3.5.10 requires choosing the right cloud services and cryptographic primitives, documenting configurations, and operating with least privilege and strong auditability. For small businesses, favor managed identity providers where possible; when self-managing, use Argon2id (or bcrypt/PBKDF2 with strong parameters), store salts per password, keep any global pepper in KMS/HSM with tightly scoped access, encrypt backups with CMKs, and capture logs and configuration evidence. These steps give you both practical security benefits and the artifacts needed to demonstrate NIST SP 800-171 Rev.2 / CMMC 2.0 Level 2 compliance.</p>",
    "plain_text": "This post explains how small businesses and practitioners can use AWS, Azure, and GCP to store user and service credentials with cryptographic protections that meet NIST SP 800-171 Rev.2 and CMMC 2.0 Level 2 Control IA.L2-3.5.10, focusing on practical implementation, concrete cloud-native choices, and the operational evidence you’ll need for compliance.\n\nUnderstanding the requirement (Compliance Framework, Practice, and Objectives)\nNIST SP 800-171 / CMMC IA.L2-3.5.10 requires that credentials are protected using cryptographic mechanisms to prevent unauthorized disclosure and misuse. The key objectives are: (1) ensure passwords and secrets are not stored in plaintext or weakly protected forms, (2) ensure cryptographic operations use approved algorithms and validated modules where applicable, and (3) provide evidence of controls, configuration, and logging. Implementation notes for your Compliance Framework: document the chosen algorithms, key management approach, identity provider configuration, and operational procedures for key rotation, access control, and audit logging.\n\nCloud-native options: AWS, Azure, and GCP\n\nAWS\nAWS options include using managed identity services (Amazon Cognito) or implementing your own authentication backed by RDS/DynamoDB with cryptographically hashed passwords. For key material and \"pepper\" storage, use AWS KMS (Customer Managed Keys) or CloudHSM for FIPS-validated HSMs. Use Secrets Manager or Parameter Store to hold service credentials (rotated) — but remember user passwords should be hashed (not reversible) in your database; Secrets Manager is for service/user API keys, not primary user password hashes. Enable CloudTrail and KMS key policies with least privilege, and enable automatic key rotation on CMKs if required by policy.\n\nAzure\nAzure provides Azure AD B2C (for consumer/user identity) or you can use a custom auth stack with Azure Key Vault for key material and Azure SQL/Key Vault integration. Use Key Vault Managed HSM if you need FIPS 140-2 L2/L3 assurances. For small businesses, Azure AD B2C offloads password storage and hashing to Microsoft-managed services that meet many compliance needs; if you manage passwords yourself, store only salted, memory-hard hashes in your database and keep any global secret/pepper encrypted in Key Vault with RBAC restricted to the application identity.\n\nGCP\nGCP's Identity Platform is the managed route; otherwise, use Cloud KMS / Cloud HSM and Secret Manager. For storing hashed passwords use Firestore/Cloud SQL and protect backups using Customer-Managed Encryption Keys (CMEK) in Cloud KMS. Use IAM conditions to narrowly scope which service accounts can decrypt keys, and enable Cloud Audit Logs to provide the event history auditors will want to see for access to key material and secret decryption operations.\n\nBest practices for password storage and cryptography\nDo not store plaintext passwords. Use a modern memory- and CPU-hard password hashing function (Argon2id is recommended; bcrypt is acceptable; PBKDF2-HMAC-SHA256 with sufficiently high iteration counts is a fallback). Use a unique per-password salt (minimum 16 random bytes) and a global pepper stored and rotated in your KMS/HSM. Example parameters you might start from (adjust for your environment): Argon2id with time cost 2–4, memory 64–256 MB per hash, parallelism 1–4; for bcrypt, cost 12–14. Ensure salts are stored alongside the hash in the database and the pepper is never persisted in the DB but retrieved at runtime via a KMS call. Also enforce TLS 1.2/1.3 for all in-transit operations and apply envelope encryption for backups (DB snapshots encrypted with CMEK/CMK).\n\nImplementation steps and small-business scenarios\nStep-by-step, a practical implementation for a small e-commerce site: (1) Prefer a managed identity provider (Cognito, Azure AD B2C, or Identity Platform) to reduce scope; (2) If self-managing, implement Argon2id password hashing in your application, store hash+salt in your DB, and store a pepper in KMS; (3) Configure KMS key policies to allow only the application runtime role to decrypt the pepper; (4) Protect DB backups with envelope encryption using a CMK; (5) Enable audit logging (CloudTrail/Monitor/Audit Logs) and retain logs per your policy for evidence. A concrete example: a small shop on AWS uses Cognito for customer sign-in (minimized scope), and for employees uses an internal app that hashes passwords with Argon2id and stores a pepper in an AWS KMS CMK with rotation enabled and CloudTrail logging to an S3 audit bucket with access logged and restricted.\n\nCompliance evidence, operational controls, and configuration\nFor NIST/CMMC evidence, collect: architecture diagrams showing where hashing occurs and where keys are stored, configuration screenshots (Key Vault/KMS policies, CMK rotation schedule), parameterized hashing settings, access control lists for KMS/Key Vault/Secret Manager, audit logs showing key use and secret access, and test results that validate algorithms and configurations. If you rely on a managed identity provider, include its compliance documentation and the controls you configured (e.g., MFA, sign-in policies). Also document your incident response and credential compromise plan, password policy, and periodic review schedule.\n\nRisks of not implementing correctly\nIf you fail to cryptographically protect passwords properly, risks include credential theft via database breach, credential stuffing across other services, privilege escalation, lateral movement within your environment, regulatory penalties, loss of DoD/prime contracts (for contractors handling CUI), and reputational damage. Weak hashing parameters or exposed peppers/keys dramatically reduce the work factor for attackers; lack of logging or key access controls inhibits your ability to detect breaches and produce compliance evidence.\n\nSummary\nMeeting IA.L2-3.5.10 requires choosing the right cloud services and cryptographic primitives, documenting configurations, and operating with least privilege and strong auditability. For small businesses, favor managed identity providers where possible; when self-managing, use Argon2id (or bcrypt/PBKDF2 with strong parameters), store salts per password, keep any global pepper in KMS/HSM with tightly scoped access, encrypt backups with CMKs, and capture logs and configuration evidence. These steps give you both practical security benefits and the artifacts needed to demonstrate NIST SP 800-171 Rev.2 / CMMC 2.0 Level 2 compliance."
  },
  "metadata": {
    "description": "Practical guidance for using AWS, Azure, and GCP services and cryptographic best practices to store passwords in compliance with NIST SP 800-171 Rev.2 / CMMC 2.0 IA.L2-3.5.10.",
    "permalink": "/how-to-use-awsazuregcp-to-store-cryptographically-protected-passwords-in-compliance-with-nist-sp-800-171-rev2-cmmc-20-level-2-control-ial2-3510.json",
    "categories": [],
    "tags": []
  }
}