bởi Chris Sciarrino, Ravikant Sharma, and Rahul Gautam | on 08 NOV 2023 |
Trong quá khứ, các ứng dụng hoặc hệ thống – được xác định là các phần tử logic tự động hoạt động mà không tương tác trực tiếp với người dùng – đã đối mặt với những thách thức liên quan đến các thông tin chứng thực có tuổi thọ dài như access keys. Trong một số trường hợp, các thông tin chứng thực có tuổi thọ dài có thể tăng cường công đoạn vận hành và phạm vi tác động trong trường hợp tiết lộ không cố ý.
Để giúp giảm thiểu những rủi ro này và tuân thủ các best practice sử dụng thông tin chứng thực ngắn hạn, Amazon Web Services (AWS) đã giới thiệu IAM Roles Anywhere, một tính năng của AWS Identity and Access Management (IAM). Với sự ra mắt của IAM Roles Anywhere, các hệ thống chạy bên ngoài AWS có thể trao đổi chứng chỉ X.509 để giả định một vai trò IAM và nhận được thông tin chứng thực IAM tạm thời từ AWS Security Token Service (AWS STS).
Bạn có thể sử dụng IAM Roles Anywhere để giúp bạn triển khai một phương thức xác thực an toàn và dễ quản lý. Nó sử dụng các chính sách và vai trò IAM giống như trong AWS, giúp đơn giản hóa quản trị và quản lý chính sách trên các môi trường đám mây kết hợp. Ngoài ra, các chứng chỉ được sử dụng trong quá trình này đi kèm với một khoảng thời gian hiệu lực được xác định khi yêu cầu chứng chỉ được tạo, nâng cao tính bảo mật bằng cách cung cấp một niềm tin có thời hạn cho các danh tính. Hơn nữa, khách hàng trong môi trường bảo mật cao có thể tùy chọn lưu trữ khóa riêng tư cho các chứng chỉ trong các mô-đun bảo mật phần cứng tương thích PKCS #11 để có thêm sự bảo vệ.
Đối với các tổ chức thiếu một cơ sở hạ tầng khóa công khai (PKI) hiện có, AWS Private Certificate Authority cho phép tạo một cấu trúc chứng chỉ phân cấp mà không cần phức tạp của việc tự lưu trữ một PKI.
Với những mô tả của IAM Roles Anywhere, nay có yêu cầu đi kèm để quản lý chứng chỉ và vòng đời của chúng. AWS Private CA là một dịch vụ quản lý của AWS có thể phát hành chứng chỉ x509 cho các máy chủ. Điều này làm cho nó lý tưởng để sử dụng với IAM Roles Anywhere. Tuy nhiên, AWS Private CA không triển khai chứng chỉ một cách tự nhiên trên các máy chủ.
Việc triển khai chứng chỉ là một phần cần thiết trong quá trình quản lý vòng đời chứng chỉ cho IAM Roles Anywhere, sự thiếu vắng này có thể dẫn đến không hiệu quả vận hành. May mắn thay, có một giải pháp. Bằng cách sử dụng AWS Systems Manager với khả năng Run Command, bạn có thể tự động cấp và gia hạn chứng chỉ từ AWS Private CA. Điều này đơn giản hóa quá trình quản lý IAM Roles Anywhere trên quy mô lớn.
Trong bài viết blog này, chúng tôi sẽ hướng dẫn bạn qua một mô hình kiến trúc sử dụng AWS Private CA và Systems Manager để tự động cấp và gia hạn chứng chỉ x509. Mô hình này giúp tích hợp các máy chủ không phải của AWS với IAM Roles Anywhere một cách mượt mà. Nó có thể giúp bạn thay thế thông tin chứng thực dài hạn trong khi giảm độ phức tạp vận hành của IAM Roles Anywhere với tự động cấp chứng chỉ.
Mặc dù IAM Roles Anywhere hỗ trợ cả Windows và Linux, giải pháp này được thiết kế cho môi trường Linux. Người dùng Windows tích hợp với Active Directory nên xem xét AWS Private CA Connector for Active Directory. Bằng cách triển khai mô hình kiến trúc này, bạn có thể phân phối chứng chỉ cho các máy chủ Linux không phải của AWS, từ đó cho phép chúng sử dụng IAM Roles Anywhere. Phương pháp này có thể giúp bạn đơn giản hóa các nhiệm vụ quản lý chứng chỉ.
Architecture overview
Figure 1: Architecture overview
Mô hình kiến trúc mà chúng tôi đề xuất (Hình 1) bao gồm nhiều giai đoạn, liên quan đến các dịch vụ AWS bao gồm Amazon EventBridge, AWS Lambda, Amazon DynamoDB và Systems Manager.
- Amazon EventBridge Scheduler gọi một hàm Lambda được gọi là CertCheck hai lần mỗi ngày.
- Hàm Lambda quét một bảng DynamoDB để xác định các phiên bản yêu cầu quản lý chứng chỉ. Nó đặc biệt nhắm vào các phiên bản được quản lý bởi Systems Manager, mà quản trị viên điền vào bảng.
- Thông tin về các phiên bản không có chứng chỉ và các phiên bản yêu cầu chứng chỉ mới do chứng chỉ hiện có hết hạn được nhận bởi CertCheck.
- Tùy thuộc vào ngày hết hạn của chứng chỉ cho một phiên bản cụ thể, một hàm Lambda thứ hai được gọi là CertIssue được khởi chạy.
- CertIssue chỉ thị cho Systems Manager áp dụng một lệnh chạy trên phiên bản.
- Lệnh Chạy tạo ra một yêu cầu ký chứng chỉ (CSR) và một khóa riêng tư trên phiên bản.
- CSR được Systems Manager truy xuất, khóa riêng tư được lưu trữ an toàn trên phiên bản.
- Sau đó, CertIssue truy xuất CSR từ Systems Manager.
- CertIssue sử dụng CSR để yêu cầu một chứng chỉ đã được ký từ AWS Private CA.
- Khi chứng chỉ được phát hành thành công, AWS Private CA tạo một sự kiện thông qua EventBridge chứa ID của chứng chỉ mới được phát hành.
- Sự kiện này sau đó gọi một hàm Lambda thứ ba được gọi là CertDeploy.
- CertDeploy truy xuất chứng chỉ từ AWS Private CA và gọi Systems Manager để khởi chạy Lệnh Chạy với dữ liệu chứng chỉ và cập nhật ngày hết hạn của chứng chỉ trong bảng DynamoDB để tham khảo trong tương lai.
- Lệnh Chạy thực hiện một kiểm tra ngắn để xác minh chức năng của chứng chỉ, và sau khi thành công, lưu trữ chứng chỉ đã được ký trên phiên bản.
- Sau đó, phiên bản có thể trao đổi chứng chỉ để nhận thông tin chứng thực AWS thông qua IAM Roles Anywhere.
Ngoài ra, trong trường hợp thất bại trong việc quay vòng chứng chỉ, một thông báo Amazon Simple Notification Service (Amazon SNS) được gửi đến một địa chỉ email được chỉ định trong quá trình triển khai AWS CloudFormation.
Giải pháp cho phép quay vòng chứng chỉ định kỳ. Nếu một chứng chỉ gần hết hạn, quá trình này khởi động quá trình tạo khóa riêng tư và CSR mới, từ đó phát hành một chứng chỉ mới. Chứng chỉ, khóa riêng tư và CSR mới được tạo sẽ thay thế các phiên bản hiện có.
Với việc có chứng chỉ, chúng có thể được sử dụng bởi IAM Roles Anywhere để nhận thông tin chứng thực IAM ngắn hạn. Để biết thêm chi tiết về cách thiết lập IAM Roles Anywhere, hãy xem Hướng dẫn Người dùng IAM Roles Anywhere.
Costs
Mặc dù giải pháp này mang lại nhiều lợi ích đáng kể, nhưng trước khi triển khai, quan trọng phải xem xét các chi phí liên quan. Để cung cấp một ước tính chi phí, quản lý chứng chỉ cho 100 máy chủ sẽ tốn khoảng 85 đô la mỗi tháng. Tuy nhiên, đối với một môi trường triển khai lớn hơn với 1.100 máy chủ và sử dụng mức tiên tiến của Systems Manager, chi phí sẽ là khoảng 5.937 đô la mỗi tháng. Các ước tính giá này bao gồm việc quay vòng chứng chỉ sáu lần mỗi tháng.
AWS Private CA trong chế độ ngắn hạn có một khoản phí hàng tháng là 50 đô la và mỗi lần phát hành chứng chỉ tốn 0,058 đô la. Systems Manager Hybrid Activation tiêu chuẩn không có chi phí bổ sung cho việc quản lý ít hơn 1.000 máy chủ. Nếu bạn có hơn 1.000 máy chủ, bạn phải sử dụng gói tiên tiến với một giá trị xấp xỉ 5 đô la cho mỗi máy chủ mỗi tháng. Chi phí của DynamoDB, Amazon SNS và Lambda nên dưới 5 đô la mỗi tháng cho mỗi dịch vụ cho dưới 1.000 máy chủ. Đối với môi trường có hơn 1.000 máy chủ, có thể đáng xem xét các tùy chọn khác về machine to machine authentication hoặc một tùy chọn khác để phân phối chứng chỉ.
Xin lưu ý rằng ước tính giá được đề cập ở đây áp dụng cụ thể cho khu vực AWS us-east-1 và có thể tính toán cho các khu vực khác bằng AWS Pricing Calculator.
Prerequisites
Bạn nên cài đặt một số thành phần sau để dễ dàng theo dõi blog.
- Git và AWS Command Line Interface (AWS CLI) phiên bản 2 đã được cài đặt trên máy tính mà bạn sẽ sử dụng để thiết lập CloudFormation stack từ template.
- Một Amazon Simple Storage Service (Amazon S3) bucket sẽ được sử dụng với lệnh CloudFormation package. Trong ví dụ lệnh bên dưới, chúng tôi gọi nó là DOC-EXAMPLE-BUCKET.
- Công cụ IAM Role Anywhere credential signing helper đã được cài đặt trên các máy chủ mà bạn muốn sử dụng với IAM Roles Anywhere.
- OpenSSL đã được cài đặt trên các máy chủ mà bạn muốn sử dụng với IAM Roles Anywhere.
- Một địa chỉ email để nhận thông báo về các lỗi.
Enabling Systems manager hybrid activation
Để tạo một kích hoạt kết hợp, làm theo các bước sau:
- Mở AWS Management Console cho Systems Manager, điều hướng đến Hybrid activations và chọn Create an Activation.
Figure 2: Hybrid activation page
- Nhập mô tả [tùy chọn] cho kích hoạt và điều chỉnh giá trị Instance limit đến giới hạn tối đa bạn cần, sau đó chọn Create activation.
Figure 3: Create hybrid activation
3. Điều này sẽ tạo ra một dòng thông báo màu xanh lá cây với Activation Code và Activation ID. Ghi chú lại các thông tin này.
Figure 4: Successful hybrid activation with activation code and ID
4. Cài đặt AWS Systems Manager Agent (SSM Agent) trên các máy chủ cần quản lý. Theo hướng dẫn cho hệ điều hành tương ứng. Trong các lệnh ví dụ, thay thế <activation-code>, <activation-id>, và <region> bằng mã kích hoạt và ID từ bước trước và Vùng của bạn. Đây là ví dụ các lệnh cần chạy trên một máy chủ Ubuntu:
mkdir /tmp/ssm
curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb -o /tmp/ssm/amazon-ssm-agent.deb
sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb
sudo service amazon-ssm-agent stop
sudo -E amazon-ssm-agent -register -code “<activation-code>” -id “<activation-id>” -region <region>
sudo service amazon-ssm-agent start
Bạn sẽ thấy một tin nhắn xác nhận máy chủ đã được đăng ký thành công với Systems Manager.
Lưu ý: Nếu bạn nhận được lỗi trong quá trình đăng ký Systems Manager về ký tự không hợp lệ của Vùng, hãy xác minh rằng Vùng không được đặt trong dấu ngoặc kép.
Deploy with CloudFormation
Chúng tôi đã tạo một kho Git với một mẫu CloudFormation thiết lập kiến trúc đã đề cập. Một bucket S3 hiện có được yêu cầu để CloudFormation tải lên gói Lambda.
Để khởi chạy CloudFormation stack:
- Sao chép kho Git chứa CloudFormation template và Lambda function code.
git clone https://github.com/aws-samples/aws-privateca-certificate-deployment-automator.git
- cd vào thư mục được tạo bởi Git.
cd aws-privateca-certificate-deployment-automator
- Khởi chạy ngăn xếp CloudFormation trong thư mục Git đã sao chép bằng cách sử dụng tệp cf_template.yaml, thay thế <DOC-EXAMPLE-BUCKET> bằng tên bucket S3 của bạn từ các yêu cầu tiên quyết.
aws cloudformation package –template-file cf_template.yaml –output-template-file packaged.yaml –s3-bucket <DOC-EXAMPLE-BUCKET>
Lưu ý: Các lệnh này nên được chạy trên hệ thống bạn dự định sử dụng để triển khai CloudFormation và đã cài đặt Git và AWS CLI.
Sau khi chạy thành công lệnh đóng gói CloudFormation, chạy lệnh triển khai CloudFormation. Mẫu hỗ trợ các tham số khác nhau để thay đổi đường dẫn nơi chứa chứng chỉ và khóa sẽ được tạo. Điều chỉnh các đường dẫn theo cần thiết với cờ parameter-overrides, nhưng hãy đảm bảo rằng chúng tồn tại trên các máy chủ. Thay thế placeholder <email> bằng địa chỉ email mà bạn muốn nhận thông báo về lỗi. Tên stack phải viết thường.
aws cloudformation deploy –template packaged.yaml –stack-name ssm-pca-stack –capabilities CAPABILITY_NAMED_IAM –parameter-overrides SNSSubscriberEmail=<email>
Các tham số CloudFormation có sẵn được liệt kê trong bảng sau:
| Parameter | Default value | Use |
| AWSSigningHelperPath | /root | Default path on the host for the AWS Signing Helper binary |
| CACertPath | /tmp | Default path on the host the CA certificate will be created in |
| CACertValidity | 10 | Default CA certificate length in years |
| CACommonNam | ca.example.com | Default CA certificate common name |
| CACountry | US | Default CA certificate country code |
| CertPath | /tmp | Default path on the host the certificates will be created in |
| CSRPath | /tmp | Default path on the host the certificates will be created in |
| KeyAlgorithm | RSA_2048 | Default algorithm use to create the CA private key |
| KeyPath | /tmp | Default path on the host the private keys will be created in |
| OrgName | Example Corp | Default CA certificate organization name |
| SigningAlgorithm | SHA256WITHRSA | Default CA signing algorithm for issued certificates |
Sau khi CloudFormation stack đã sẵn sàng, thêm thủ công các máy chủ cần quản lý chứng chỉ vào bảng DynamoDB.
Bạn cũng sẽ nhận được một email tại địa chỉ email được chỉ định để chấp nhận đăng ký SNS topic. Hãy đảm bảo chọn liên kết Confirm Subscription như được hiển thị trong Hình 5.
Figure 5: SNS topic subscription confirmation
Add data to the DynamoDB table
- Mở bảng điều khiển AWS Systems Manager và chọn Fleet Manager.
- Chọn Managed Nodes và sao chép giá trị Node ID. Giá trị Node ID trong Fleet Manager như được hiển thị trong Hình 6 sẽ là ID máy chủ được sử dụng trong bước tiếp theo.
Hình 6: Node ID của Systems Manager
- Mở bảng điều khiển DynamoDB và chọn Dashboard, sau đó chọn Tables trong thanh điều hướng bên trái.
Hình 7: Menu DynamoDB
- Chọn bảng certificates.
Hình 8: Các bảng DynamoDB
- Chọn Explore table items và sau đó chọn Create item.
- Nhập node ID làm giá trị cho thuộc tính hostID như đã sao chép ở bước 2.
Hình 9: Tạo thuộc tính hostID trong bảng DynamoDB
Các thuộc tính chuỗi bổ sung được liệt kê trong bảng sau có thể được thêm vào mục để chỉ định đường dẫn cho các chứng chỉ trên từng máy chủ. Nếu các thuộc tính này không được tạo, hoặc sẽ sử dụng các đường dẫn mặc định hoặc ghi đè trong các tham số CloudFormation.
| Additional supported attributes | Use |
| certPath | Path on the host the certificate will be created in |
| keyPath | Path on the host the private key will be created in |
| signinghelperPath | Path on the host for the AWS Signing Helper binary |
| cacertPath | Path on the host the CA certificate will be created in |
Hàm Lambda CertCheck được tạo bởi mẫu CloudFormation chạy hai lần mỗi ngày để xác minh rằng các chứng chỉ cho các máy chủ này luôn được cập nhật. Nếu cần thiết, bạn có thể sử dụng lệnh gọi hàm Lambda để chạy hàm Lambda theo yêu cầu.
aws lambda invoke –function-name CertCheck-Trigger –cli-binary-format raw-in-base64-out response.json
Thông tin về hạn chế chứng chỉ và số serial được lưu trữ trong bảng DynamoDB certificate. Chọn bảng certificates và chọn Explore table items để xem dữ liệu.
Hình 10: Mục bảng DynamoDB với thông tin hết hạn và số serial cho một máy chủ
Validation
Để xác minh việc triển khai chứng chỉ thành công, bạn nên tìm thấy bốn tệp tin tại vị trí được chỉ định trong tham số CloudFormation hoặc thuộc tính bảng DynamoDB, như được hiển thị trong bảng sau.
| File | Use | Location |
| {host}.crt | The certificate containing the public key, signed by AWS Private CA. | certPath attribute in DynamoDB. Otherwise, default specified by the certPath CF parameter. |
| ca_chain_certificate.crt | The certificate chain including intermediates from AWS Private CA. | cacertPath attribute in DynamoDB. Otherwise, default specified by the CACertPath CF parameter. |
| {host}.key | The private key for the certificate. | keyPath attribute in DynamoDB. Otherwise, default specified by the KeyPath CF parameter. |
| {host}.csr | The CSR used to generate the signed certificate. | Default specified by the CSRPath CF parameter. |
.
Các chứng chỉ này hiện có thể được sử dụng để cấu hình máy chủ cho IAM Roles Anywhere. Xem Obtaining temporary security credentials from AWS Identity and Access Management Roles Anywhere để sử dụng công cụ signing helper do IAM Roles Anywhere cung cấp. Công cụ signing helper phải được cài đặt trên máy chủ để xác minh hoạt động. Bạn có thể truyền vị trí của signing helper như một tham số cho mẫu CloudFormation.
Lưu ý: Như một quy tắc bảo mật tốt, quan trọng để sử dụng quyền hạn và ACL để bảo mật khóa riêng tư và hạn chế quyền truy cập vào nó. Quy trình tự động sẽ tạo và thiết lập khóa riêng tư với quyền chmod 400. Lệnh chmod được sử dụng để thay đổi quyền truy cập cho một tệp tin hoặc thư mục. Quyền chmod 400 cho phép chủ sở hữu của tệp tin đọc tệp tin trong khi ngăn cản người khác đọc, ghi hoặc chạy tệp tin đó.
Revoke a certificate
AWS Private CA cũng hỗ trợ tạo danh sách thu hồi chứng chỉ (CRL), có thể được nhập vào IAM Roles Anywhere. Mẫu CloudFormation tự động thiết lập quy trình CRL giữa AWS Private CA và IAM Roles Anywhere.
Hình 11: Quy trình thu hồi chứng chỉ
Trong vòng 30 phút sau khi thu hồi, AWS Private CA tạo một tệp CRL và tải lên thông qua S3 bucket CRL được tạo bởi mẫu CloudFormation. Sau đó, hàm Lambda CRLProcessor nhận thông báo qua EventBridge về tệp CRL mới và chuyển nó đến API IAM Roles Anywhere.
Để thu hồi một chứng chỉ, sử dụng AWS CLI. Trong ví dụ sau, thay thế <certificate-authority-arn>, <certificate-serial> và <revocation-reason> bằng thông tin của bạn.
aws acm-pca revoke-certificate –certificate-authority-arn <certificate-authority-arn> –certificate-serial <certificate-serial> –revocation-reason <revocation-reason>
ARN của AWS Private CA có thể được tìm thấy trong các đầu ra của CloudFormation stack dưới tên PCAARN. Số serial chứng chỉ được liệt kê trong bảng DynamoDB cho mỗi máy chủ như đã đề cập trước đó. Các lý do thu hồi có thể là một trong các giá trị sau đây:
- UNSPECIFIED
- KEY_COMPROMISE
- CERTIFICATE_AUTHORITY_COMPROMISE
- AFFILIATION_CHANGED
- SUPERSEDED
- CESSATION_OF_OPERATION
- PRIVILEGE_WITHDRAWN
- A_A_COMPROMISE
Việc thu hồi chứng chỉ sẽ không tự động tạo chứng chỉ mới cho máy chủ. Xem Manually rotate certificates để biết thêm thông tin.
Manually rotate certificates
Các chứng chỉ được đặt để hết hạn hàng tuần và được xoay chuyển vào ngày hết hạn. Nếu bạn cần thay thế một chứng chỉ bằng cách thủ công sớm hơn, hãy xóa ngày hết hạn cho bản ghi của máy chủ trong bảng DynamoDB (xem Hình 12). Trong lần chạy tiếp theo của hàm Lambda, việc thiếu ngày hết hạn sẽ làm cho chứng chỉ cho máy chủ đó bị thay thế. Để thay mới chứng chỉ ngay lập tức hoặc kiểm tra chức năng xoay chuyển, hãy xóa ngày hết hạn từ bảng DynamoDB và chạy lệnh Lambda invoke sau. Sau khi chứng chỉ đã được xoay chuyển, ngày hết hạn mới sẽ được liệt kê trong bảng.
aws lambda invoke –function-name CertCheck-Trigger –cli-binary-format raw-in-base64-out response.json
Conclusion
Bằng cách sử dụng AWS IAM Roles Anywhere, các hệ thống bên ngoài của AWS có thể sử dụng các thông tin xác thực ngắn hạn dưới dạng chứng chỉ x509 để đổi lấy thông tin xác thực AWS STS. Điều này giúp cải thiện tính bảo mật trong một môi trường lai bằng cách giảm việc sử dụng các khóa truy cập dài hạn làm thông tin xác thực.
Đối với các tổ chức không có hạ tầng PKI doanh nghiệp hiện có, giải pháp được mô tả trong bài viết này cung cấp một phương pháp tự động tạo và xoay chuyển chứng chỉ bằng cách sử dụng AWS Private CA và AWS Systems Manager. Chúng tôi đã chỉ cho bạn cách sử dụng Systems Manager để thiết lập một máy chủ không phải của AWS với chứng chỉ để sử dụng với IAM Roles Anywhere và đảm bảo chúng được xoay chuyển thường xuyên.
Triển khai giải pháp này ngay hôm nay và tiến tới IAM Roles Anywhere để loại bỏ thông tin xác thực dài hạn cho truy cập theo chương trình. Để biết thêm thông tin, hãy xem bài viết blog IAM Roles Anywhere hoặc đặt câu hỏi của bạn trên AWS re:Post.
Nếu bạn có phản hồi về bài viết này, hãy gửi ý kiến trong phần Bình luận ở dưới. Nếu bạn có câu hỏi về bài viết này, hãy bắt đầu một luồng mới trên IAM re:Post hoặc liên hệ với AWS Support.
Bạn muốn có thêm nội dung hướng dẫn, tin tức và thông báo về tính năng về bảo mật AWS? Theo dõi chúng tôi trên Twitter.