IAM Roles Anywhere cho phép workload chạy ngoài AWS xác thực bằng X.509 certificate để nhận credential tạm thời của một IAM Role. AWS cần một trust anchor để tin tưởng các client certificate do CA đó ký.
- Root CA (
rootCA.pem): đăng ký làm Trust Anchor trên AWS. - Client certificate (
client.pem+client.key): đặt trên server cần gọi AWS. - Khi nào dùng: server on-premise, môi trường air-gapped/disconnected, hoặc hệ thống không muốn lưu access key tĩnh.
Chuẩn bị thư mục làm việc
Mình gom toàn bộ file vào một thư mục riêng để dễ quản lý và dễ bảo vệ private key. Việc này tránh lẫn key với các file khác.
mkdir -p ~/iam-roles-anywhere
cd ~/iam-roles-anywhere
Tạo Root CA cho IAM Roles Anywhere
Root CA gồm 3 việc: viết file cấu hình, sinh private key, rồi tự ký ra certificate. Làm đúng thứ tự này.
Bước 1: Tạo file rootCA.config
File này khai báo thông tin định danh và extension cho CA. Bạn dùng vi hoặc nano đều được, không cần sudo vì file nằm trong thư mục home của bạn.
nano rootCA.config
Paste nội dung sau (đổi O, OU, CN theo tổ chức của bạn):
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
prompt = no
[req_distinguished_name]
C = VN
O = MyOrg
OU = Data
ST = Hanoi
L = Hanoi
CN = Project
[v3_ca]
basicConstraints = critical,CA:TRUE
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
Nếu dùng nano: Ctrl + O để lưu, Enter để xác nhận tên file, Ctrl + X để thoát.
Bước 2.1: Tạo private key cho Root CA
Đây là key quan trọng nhất. Ai có rootCA.key là ký được certificate hợp lệ với trust anchor của bạn.
openssl genrsa -out rootCA.key 4096
Kiểm tra key (tùy chọn):
openssl rsa -in rootCA.key -check
Kết quả mong đợi:
RSA key ok
Bước 2.2: Tạo Root CA certificate
Lệnh này tự ký certificate, hiệu lực 1095 ngày (khoảng 3 năm). Đây là file bạn sẽ upload lên AWS làm trust anchor.
openssl req -x509 -new -key rootCA.key -out rootCA.pem -days 1095 -config rootCA.config
Tạo client certificate bằng OpenSSL
Client certificate là thứ server của bạn dùng để chứng minh danh tính với AWS. Nó phải có extendedKeyUsage = clientAuth và CA:FALSE.
Bước 3.1: Tạo client.config
cd ~/iam-roles-anywhere
nano client.config
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = VN
O = MyOrg
OU = Client
ST = Hanoi
L = Hanoi
CN = project-client
[v3_req]
basicConstraints = CA:FALSE
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
Bước 3.2: Tạo client.key
Mỗi client nên có key riêng, không dùng chung với Root CA.
openssl genrsa -out client.key 4096
Bước 3.3: Tạo CSR
CSR (Certificate Signing Request) là yêu cầu xin Root CA ký cho client.
openssl req -new -key client.key -out client.csr -config client.config
Bước 3.4: Root CA ký client certificate
Đây là bước quan trọng nhất. Tham số -extfile và -extensions giúp certificate giữ đúng clientAuth và keyUsage mà IAM Roles Anywhere yêu cầu.
openssl x509 -req \
-in client.csr \
-CA rootCA.pem \
-CAkey rootCA.key \
-CAcreateserial \
-out client.pem \
-days 365 \
-sha256 \
-extfile client.config \
-extensions v3_req
Bước 3.5: Tạo file client.pfx
File .pfx (PKCS#12) gộp key, certificate và chain vào một file, tiện khi import vào Windows hoặc một số công cụ. Lệnh sẽ hỏi bạn đặt mật khẩu cho file.
openssl pkcs12 \
-export \
-out client.pfx \
-inkey client.key \
-in client.pem \
-certfile rootCA.pem
Bước 3.6: Kiểm tra client certificate
Xác minh client certificate thực sự được ký bởi Root CA vừa tạo:
openssl verify -verbose \
-CAfile rootCA.pem \
client.pem
Kết quả mong đợi:
client.pem: OK