Lỗi xảy ra
Error: No valid credential sources found for provider "aws".
Please see https://registry.terraform.io/providers/hashicorp/aws/latest/docs#authentication
for more information about providing credentials.
With the provider configuration at ...
Terraform đã tìm kiếm tất cả các nguồn credentials mà nó biết nhưng không tìm thấy gì. Lỗi này thường xảy ra trên máy mới cài đặt, bên trong pipeline CI/CD thiếu secrets, hoặc ngay sau khi bạn chuyển AWS profile mà quên cập nhật biến môi trường.
Nguyên nhân
AWS provider kiểm tra credentials theo thứ tự cố định:
- Static credentials được hardcode trong provider block
- Biến môi trường (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) - Shared credentials file (
~/.aws/credentials) - AWS config file (
~/.aws/config) - EC2 instance profile / ECS task role / EKS pod identity
Nếu cả năm nguồn đều không có, bạn sẽ gặp lỗi này. Chọn bất kỳ một nguồn nào để khắc phục.
Cách sửa: Nhiều phương án
Phương án 1 — Đặt biến môi trường (Nhanh nhất)
Cách nhanh nhất để gỡ chặn. Export credentials trong shell, sau đó chạy Terraform:
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_DEFAULT_REGION="us-east-1"
Trên Windows (PowerShell):
$env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
$env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
$env:AWS_DEFAULT_REGION="us-east-1"
Chạy lại terraform plan là xong.
Phương án 2 — Cấu hình AWS CLI Profile
Đã cài AWS CLI rồi? Tạo một named profile:
aws configure --profile my-profile
Trỏ Terraform tới profile đó qua biến môi trường:
export AWS_PROFILE=my-profile
Hoặc hardcode trong provider block nếu bạn muốn:
provider "aws" {
region = "us-east-1"
profile = "my-profile"
}
Phương án 3 — Credentials File
Kiểm tra xem ~/.aws/credentials có tồn tại và có mục [default] không:
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Cũng xác nhận rằng ~/.aws/config đã có region:
[default]
region = us-east-1
Thiếu một trong hai file này là lỗi phổ biến khi mới cài đặt máy trạm.
Phương án 4 — Assume Role (Phổ biến trong CI/CD)
Nhiều pipeline sử dụng IAM role thay vì các key tồn tại lâu dài. Cấu hình role assumption trong provider block:
provider "aws" {
region = "us-east-1"
assume_role {
role_arn = "arn:aws:iam::123456789012:role/TerraformRole"
session_name = "TerraformSession"
}
}
Lưu ý: base credentials dùng để thực hiện assume-role vẫn cần tồn tại ở đâu đó — biến môi trường hoặc instance profile đều được.
Phương án 5 — EC2/ECS/EKS Instance Profile
Đang chạy Terraform trên tài nguyên compute của AWS? Gắn IAM role vào instance hoặc task. Không cần credentials file — SDK sẽ tự động lấy token ngắn hạn từ metadata service.
Kiểm tra metadata service có phản hồi không:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
Nếu trả về tên role, Terraform sẽ tự động sử dụng ở lần chạy tiếp theo.
Phương án 6 — GitHub Actions / Ví dụ CI
Lưu keys dưới dạng repository secrets (Settings → Secrets → Actions), sau đó inject chúng dưới dạng biến môi trường trong workflow step:
- name: Terraform Plan
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: us-east-1
run: terraform plan
Xác nhận đã sửa
Trước khi chạy Terraform, xác nhận AWS nhận thấy credentials hợp lệ:
# Kiểm tra credentials đang hoạt động
aws sts get-caller-identity
Phản hồi thành công trông như thế này:
{
"UserId": "AIDAIOSFODNN7EXAMPLE",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/terraform-user"
}
Bây giờ chạy Terraform:
terraform init
terraform plan
Nếu thấy resource diff thay vì lỗi credentials nghĩa là bạn đã xử lý xong.
Mẹo hay
- Thường xuyên rotate key. Static key tồn tại lâu dài là nguyên nhân số 1 gây ra lỗi này trên production — ai đó rotate key mà quên cập nhật CI. Chuyển sang dùng short-lived credentials qua
aws sso loginhoặc role assumption để tránh hoàn toàn vấn đề này. - Pipeline chạy được hôm qua, hôm nay lại lỗi? Kiểm tra xem IAM access key có bị rotate hoặc vô hiệu hóa không. Điều này đặc biệt phổ biến khi team bảo mật áp dụng chính sách rotate key 90 ngày.
- Nhiều tài khoản AWS? Kiểm tra kỹ xem
AWS_PROFILEhoặc tham sốprofilecủa provider có trỏ đúng tài khoản không. Nhầm lẫn giữa credentials staging và production là lỗi dễ mắc khi quản lý nhiều tài khoản cùng lúc. - Đừng bao giờ commit credentials lên version control. Với các secrets như mật khẩu backend được tham chiếu qua
datasources, hãy tạo chúng cục bộ bằng công cụ như Password Generator trên ToolCraft — chạy hoàn toàn trên trình duyệt, không có gì rời khỏi máy bạn.

