AWS Authentication
To deploy infrastructure on AWS using Terraform, you must authenticate Terraform to your AWS account. This guide covers real-life scenarios for local development, CI/CD pipelines, and multi-account setups, with best practices for security and automation.
1. Local Development: AWS CLI Credentials
The simplest way to authenticate is to use the AWS CLI. Configure your credentials with:
This stores your credentials in ~/.aws/credentials
and region in ~/.aws/config
:
Terraform will automatically use these credentials.
Best Practice: Use named profiles for multiple accounts:
Reference a profile in your provider block:
2. CI/CD Pipelines: Environment Variables
For automation (GitHub Actions, GitLab CI, Azure Pipelines), use environment variables for credentials:
GitHub Actions Example:
GitLab CI Example:
Azure DevOps Example:
3. Advanced: Assume Role for Multi-Account/MFA
For organizations using AWS Organizations or requiring MFA, use the assume_role
block:
Best Practice: Use short-lived credentials and roles for CI/CD, never long-lived root keys.
4. NixOS: Declarative AWS Credentials
Add credentials as environment variables in your NixOS configuration:
Best Practices
Use IAM roles and short-lived credentials for automation (never root keys)
Store secrets in a secure vault (GitHub/Azure/GitLab secrets, HashiCorp Vault, SSM Parameter Store)
Use named profiles for multi-account setups
Rotate credentials regularly
Enable MFA for all users
Use least privilege IAM policies
References
Tip: For cloud-native, secure, and auditable deployments, always use roles and secret managers instead of hardcoded credentials.
Last updated