Thiết lập AWS Private Certificate Authority để phát hành chứng chỉ sử dụng với IAM Roles Anywhere

Theo truyền thống, các ứng dụng và hệ thống – được định nghĩa là các phần logic tự động hoạt động mà không cần sự tương tác trực tiếp từ người dùng – đã đối mặt với những thách thức liên quan đến long-lived credentials, chẳng hạn như access keys. Trong một số hoàn cảnh nhất định, long-lived credentials có thể làm tăng chi phí vận hành và phạm vi tác động trong trường hợp vô tình bị tiết lộ

Để giúp giảm thiểu những rủi ro này và tuân theo thực tiễn tốt nhất là sử dụng thông tin xác 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 việc giới thiệu IAM Roles Anywhere, các hệ thống chạy bên ngoài AWS có thể trao đổi X.509 certificates để đảm nhận một vai trò của IAM role và nhận thông tin xác thực IAM tạm thời từ Dịch vụ 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ùng các chính sách và vai trò như trong AWS, giúp đơn giản hóa quản lý chính sách và quyển trị quyền trên các môi trường hybrid cloud. Hơn nữa, 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 tích hợp được xác định khi yêu cầu chứng chỉ được tạo, nâng cao tính an toàn bằng cách cung cấp một time-limited trust đối với 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 ý giữ private keys cho certificates được lưu trữ trong PKCS #11- mô đun bảo mật khần cứng để gia tăng bảo mật.

Với các tổ chức không có sẵn cơ sở hạ tầng khóa công khai (PKI), AWS Private Certificate Authority sẽ cho phép tạo một hệ thống phân cấp chứng chỉ mà không cần đến sự phức tạp của việc lưu lưu trữ một PKI.

Với việc giới thiệu IAM Roles Anywhere, đi kèm theo đó là yêu cầu quản lý chứng chỉ và vòng đời của chúng. AWS Private CA là một dịch vụ được quản lý bởi AWS có khả năng cấp phát chứng chỉ X.509 cho các máy chủ. Điều này làm cho nó trở nên lý tưởng để sử dụng với IAM Roles Anywhere. Tuy nhiên, AWS Private CA không triển khai một cách tự nhiên lên các máy chủ

Việc triển khai chứng là một phần quan trọng của việc quản lý chu kỳ hoạt động của chứng chỉ cho IAM Roles Anywhere, sự thiếu vắng này có thể dẫn tới việc không vận hành hiệu quả. May mắn nay, có một giải pháp. Bằng cách sử dụng AWS Systems Manager với khả năng chạy Command của nó. bạn có thể tự động phát hành và gia hạn chứng chỉ từ AWS Private CA. Điều này giúp đơn giản hóa quá trình quản lý của IAM Roles Anywhere trên quy mô lớn.

In this blog post, we walk you through an architectural pattern that uses AWS Private CA and Systems Manager to automate issuing and renewing x509 certificates. This pattern smooths the integration of non-AWS hosts with IAM Roles Anywhere. It can help you replace long-term credentials while reducing operational complexity of IAM Roles Anywhere with certificate vending automation.

Trong bài viết 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 phát và gia hạn chứng chỉ X.509. Mô hình này giúp đơn giản hóa việc tích hợp các máy chủ không thuộc AWS với IAM Roles Anywhere. Nó có thể giúp bạn thay thế các thông tin xác thực có thời han tồn tại dài đồng thời giảm thiểu mức độ phức tạp trong vận hành của IAM Roles Anywhere nhờ việc tự động cung cấp chứng chỉ.

While IAM Roles Anywhere supports both Windows and Linux, this solution is designed for a Linux environment. Windows users integrating with Active Directory should check out the AWS Private CA Connector for Active Directory. By implementing this architectural pattern, you can distribute certificates to your non-AWS Linux hosts, thereby enabling them to use IAM Roles Anywhere. This approach can help you simplify certificate management tasks.

Trong khi IAM Roles Anywhere hỗ trợ đồng thời 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 kiểm tra với AWS Private CA kết nối tới Active Directory. Bằng việc triển khai theo mô hình này, bạn có thể phân phối chứng chỉ tới những máy chủ Linux không thuộc AWS, từ đó cho phép họ sử dụng IAM Roles Anywhere. Cách tiếp cận này giúp đơn giản hóa các tác vụ quản lý chứng chỉ.

Tổng quan kiến trúc

Figure 1: Architecture overview

Kiến trúc mà chúng tôi đề xuất 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.

  1. Amazon EventBridge Scheduler gọi một Lambda function có tên CertCheck hai lần 1 ngày.
  2. Lambda function quét một bảng DynamoDB để xác định các instance cần quản lý chứng chỉ, đặc biệt là các instance được quản lý bởi Systems Manager, được quản trị viên cung cấp thông tin vào bảng.
  3. Thông tin về các instance không có certificate hay cần gia hạn do chứng chỉ hiện tại hết hạn sẽ được CertCheck nhận.
  4. Tùy thuộc vào ngày hết hạn của chứng chỉ đối với một phiên bản cụ thể, hàm Lambda thứ hai có tên CertIssue sẽ được khởi chạy..
  5. CertIssue hướng dẫn Systems Manager để chạy câu lệnh trên instance.
  6. Chạy câu lệnh tạo Cert Signing Request (CSR) và một khóa private key trên instance.
  7. CSR sẽ được Systems Manager truy suất, private key nằm an toàn trên instance.
  8. CertIssue sau đó truy xuất CSR từ Systems Manager.
  9. CertIssue sử dụng CSR cấp chứng chỉ đã ký từ AWS Private CA.
  10. Khi cấp chứng chỉ thành công, AWS Private CA sẽ tạo một sự kiện thông qua EventBridge chứa ID của chứng chỉ mới được cấp.
  11. Sự kiện này sẽ gọi Lambda function thứ ba gọi là CertDeploy.
  12. CertDeploy truy xuất certificate từ AWS Private CA và gọi Systems Manager để khởi động câu lệnh 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 sau này.
  13. Chạy câu lệnh thực hiện kiểm tra ngắn để xác minh tính hoạt động của certificate, và khi thành công lưu trữ chứng chỉ đã ký trên instance.
  14. Instance có thể trao đổi certificate cho AWS credentials thông qua IAM Roles Anywhere.

Trong trường hợp xoay vòng chứng chỉ thất bại, một thông báo từ Amazon Simple Notification Service (Amazon SNS) sẽ được gửi đến địa chỉ email được chỉ định trong quá trình triển khai AWS CloudFormation.

Giải pháp này cho phép xoay vòng chứng chỉ định kỳ. Khi một chứng chỉ sắp hết hạn, quy trình sẽ tự động khởi tạo khóa riêng và yêu cầu ký certificate mới (CSR), do đó phát hành một chứng chỉ mới. Certificate, private key và CSR được tạo mới sẽ thay thế những cái đã tồn tại

Với các certificate đã được triển khai, chúng có thể được sử dụng bởi IAM Roles Anywhere để lấy thông tin xác thực IAM ngắn hạn. Để biết thêm thông tin chi tiết về cách thiết lập IAM Roles Anywhere, vui lòng tham khảo Hướng dẫn sử dụng IAM Roles

Chi phí

Mặc dù giải pháp này mang lại nhiều lợi ích đáng kể, nhưng quan trọng là phải xem xét các chi phí liên quan trước khi bạn triển khai. Để cung cấp một dự báo chi phí, quản lý certificate cho 100 máy chủ sẽ tiêu tốn khoảng $85 mỗi tháng. Tuy nhiên, đối với triển khai quy mô lớn hơn đến 1,100 máy chủ với gói Systems Manager advanced, chi phí sẽ là $5937 mỗi tháng. Các ước tính giá này bao gồm việc xoay vòng certificate mỗi 6 tháng

AWS Private CA ở chế độ short-lived phải chịu khoản phí hàng tháng là $50 và mỗi lần cấp certificate có mức phí $0,058. Systems Manager Hybrid Activation tiêu chuẩn không có chi phí bổ sung khi quản lý ít hơn 1,000 máy chủ. Nếu bạn có hơn 1.000 máy chủ phải sử dụng gói nâng cao với chi phí xấp xỉ $5 mỗi máy chủ mỗi tháng. Chi phí của DynamoDB, Amazon SNS và Lambda sẽ dưới $5 mỗi tháng cho mỗi dịch vụ đối với dưới 1000 máy chủ. Đối với các môi trường có hơn 1.000 máy chủ, có thể đáng cân nhắc để để xem các lựa chọn khác về xác thực máy với máy hoặc tùy chọn khác để phân phối certificate.

Lưu ý rằng các giá ước tính đượic đề cập ở đây là cụ thể cho khu vực us-east-1 và có thể được tính toán cho các khu vực khác bằng cách sử dụng AWS Pricing Calculator.

Chuẩn bị

Bạn nên thiết lập một số mục để dễ dàng theo dõi blog hơn

  • Git và AWS Command Line Interface (AWS CLI) v2 client được cài đặt trên máy, bạn sẽ sử dụng để cài đặt CloudFormation stack từ template.
  • Một Amazon Simple Storage Service (Amazon S3) bucket được sử dụng với câu lệnh gói CloudFormation. Trong lệnh ví dụ sau, chúng tôi gọi nó là DOC-EXAMPLE-BUCKET.
  • IAM Role Anywhere credential signing helper tool được cài đặt trên máy chủ mà bạn muốn sử dụng IAM Roles Anywhere.
  • OpenSSL được cài đặt trên máy chủ mà bạn muốn sử dụng với IAM Roles Anywhere.
  • Một địa chỉ email để nhận cảnh báo lỗi

Kích hoạt Systems manager hybrid activation

Để tạo một hybrid activation, làm theo các bước sau:

  1. Mở AWS Management Console cho Systems Manager, đi tới Hybrid activations và chọn Create an Activation.


    Figure 2: Hybrid activation page
  2. Nhập một description [optional] để kích hoạt và điều chỉnh giá trị Instance limit mức tối đa mà bạn cần, sau đó chọn Create activation.



    Figure 3: Create hybrid activation
  3. Thao tác này sẽ mở ra một banner màu xanh cùng với một Activation CodeActivation ID. Hãy lưu lại những thông tin này.

Figure 4: Successful hybrid activation with activation code and ID

  1. Cài đặt AWS Systems Manager Agent (SSM Agent) trên các máy chủ được quản lý. Làm theo hướng dẫn dành cho hệ điều hành thích hợp. Trong các câu lệnh ví dụ, thay thế <activation-code>, <activation-id>, và <region> bằng với activation code và ID từ bước trước đó và Region của bạn. Đây là một câu lệnh ví dụ để chạy cho 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&gt; -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 thông báo xác nhận instance đã được đăng ký thành công với Systems Manager.

Note: Nếu bạn nhận được lỗi trong quá trình đăng ký Systems Manager, hãy xác minh Region đó không nằm trong dấu hoặc kép.

Triển khai với CloudFormation

Chúng ta đã tạo Git repository cùng với một template CloudFormation để thiết lập kiến trúc nói trên. Cần S3 bucket sẵn có để CloudFormation upload gói Lambda

Để khởi động CloudFormation stack:

  1. Clone Git repository chứa template CloudFormation và code hàm Lambda.
    git clone https://github.com/aws-samples/aws-privateca-certificate-deployment-automator.git
  2. cd vào thư mục được tạo bởi Git.

    cd aws-privateca-certificate-deployment-automator
  3. Khởi động CloudFormation stack trong bản clone Git directory sử dụng template từ file cf_template.yaml, thay thế <DOC-EXAMPLE-BUCKET> bằng tên của S3 bucket của bạn từ các điều kiện ban đầu

    aws cloudformation package –template-file cf_template.yaml –output-template-file packaged.yaml –s3-bucket <DOC-EXAMPLE-BUCKET>

Note: Các lệnh này phải được chạy trên hệ thống mà bạn định sử dụng để triển khai CloudFormation cũng như cài đặt Git và AWS CLI.

Sau khi chạy thành công lệnh gói CloudFormation, hãy chạy lệnh triển khai CloudFormation. Template hỗ trợ các tham số khác nhau để thay đổi đường dẫn của certificate và key được tạo. Điều chỉnh các đường dẫn nếu cần bằng cờ ghi đè tham số nhưng hãy xác minh rằng chúng tồn tại trên máy chủ. Thay thế trình giữ chỗ <email> bằng trình giữ chỗ mà bạn muốn nhận thông báo về lỗi. Tên stack phải ở dạng chữ 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:

ParameterDefault valueUse
AWSSigningHelperPath/rootDefault path on the host for the AWS Signing Helper binary
CACertPath/tmpDefault path on the host the CA certificate will be created in
CACertValidity10Default CA certificate length in years
CACommonNamca.example.comDefault CA certificate common name
CACountryUSDefault CA certificate country code
CertPath/tmpDefault path on the host the certificates will be created in
CSRPath/tmpDefault path on the host the certificates will be created in
KeyAlgorithmRSA_2048Default algorithm use to create the CA private key
KeyPath/tmpDefault path on the host the private keys will be created in
OrgNameExample CorpDefault CA certificate organization name
SigningAlgorithmSHA256WITHRSADefault CA signing algorithm for issued certificates

Sau khi stack CloudFormation đã sẵn sàng, thêm thủ công máy chủ yêu cầu quản lý certificate vào bảng DynamoDB

Bạn cũng sẽ nhận được email tại địa chỉ email được chỉ định để chấp nhận đăng ký topic SNS. Đảm bảo bạn đã chọn đường dẫn Confirm Subscription hiển thị ở Figure 5

Figure 5: SNS topic subscription confirmation

Thêm dữ liệu vào DynamoDB table

  1. Mở AWS Systems Manager console chọn Fleet Manager.
  2. Chọn Managed Nodes và copy giá trị Node ID. The node ID trong Fleet Manager được hiển thị ở Figure 6 sẽ là ID máy chủ được sử dụng trong bước tiếp theo.


    Figure 6: Systems Manager Node ID
  3. Mở DynamoDB console và chọn Dashboard và sau đó Tables ở ngăn điều hướng bên trái.



    Figure 7: DynamoDB menu
  4. Chọn bảng certificates.



    Figure 8: DynamoDB tables
  5. Chọn Explore table items và sau đó chọn Create item.
  6. Điền node ID cho hostID được copy ở step 2.



    Figure 9: DynamoDB table hostID attribute creation

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 chứng chỉ trên cơ sở từng máy chủ. Nếu các thuộc tính này không được tạo thì đường dẫn mặc định hoặc phần ghi đè trong tham số CloudFormation sẽ được sử dụng.

Additional supported attributesUse
certPathPath on the host the certificate will be created in
keyPathPath on the host the private key will be created in
signinghelperPathPath on the host for the AWS Signing Helper binary
cacertPathPath on the host the CA certificate will be created in

Hàm CertCheck Lambda do mẫu CloudFormation tạo chạy hai lần mỗi ngày để xác minh rằng chứng chỉ cho các máy chủ này được cập nhật. Nếu cần, bạn có thể sử dụng lệnh gọi 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

Certificate hết hạn và serial number metadata được lưu trữ trong DynamoDB table certificate. chọn bảng certificates và chọn Explore table items để hiển thị dữ liệu.

Figure 10: DynamoDB table item with certificate expiration and serial for a host

Xác thực

Để xác thực việc triển khai certificate thành công, bạn nên tìm bốn tệp ở vị trí được chỉ định trong thuộc tính bảng CloudFormation hoặc DynamoDB, như minh họa trong bảng sau.

FileUseLocation
{host}.crtThe 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.crtThe certificate chain including intermediates from AWS Private CA.cacertPath attribute in DynamoDB. Otherwise, default specified by the CACertPath CF parameter.
{host}.keyThe private key for the certificate.keyPath attribute in DynamoDB. Otherwise, default specified by the KeyPath CF parameter.
{host}.csrThe CSR used to generate the signed certificate.Default specified by the CSRPath CF parameter.

Giờ đây, bạn có thể sử dụng các chứng chỉ này để cấu hình máy chủ cho IAM Roles Anywhere. Xem  Obtaining temporary security credentials from AWS Identity and Access Management Roles Anywhere  để biết cách sử dụng công cụ trợ giúp ký kết do IAM Roles Anywhere cung cấp. Trình trợ giúp ký tên phải được cài đặt trên instance để quá trình xác thực hoạt động. Bạn có thể chuyển vị trí của trình trợ giúp ký tên dưới dạng tham số cho mẫu CloudFormation.

Note: Là một biện pháp bảo mật tốt nhất, việc sử dụng quyền hạn và ACL để giữ an toàn private key và hạn chế truy cập vào nó là rất quan trọng. Tự động hóa sẽ tạo và thiết lập private key với quyền hạn chmod 400. Lệnh chmod được sử dụng để thay đổi quyền hạn cho một tệp hoặc thư mục. Quyền hạn chmod 400 sẽ cho phép chủ sở hữu tệp đọc tệp đồng thời hạn chế người khác đọc, ghi hoặc chạy tệp.

Thu hồi một certificate

AWS Private CA cũng hỗ trợ tạo ra một certificate revocation list (CRL), có thể được imported tới IAM Roles Anywhere. Template CloudFormation tự động cài đặt tiến trình CRL giữa AWS Private CA và IAM Roles Anywhere.

Figure 11: Certificate revocation process

Trong vòng 30 phút sau khi thu hồi, AWS Private CA sẽ tạo tệp CRL và tải tệp đó lên bộ chứa CRL S3 được tạo bởi mẫu CloudFormation. Sau đó, hàm CRLProcessor Lambda nhận được thông báo qua EventBridge về tệp CRL mới và chuyển tệp đó tới API IAM Roles Anywhere.

Để thu hồi chứng chỉ, hãy sử dụng AWS CLI. Trong ví dụ sau, hãy thay thế <certificate-authority-arn>, <certificate-serial> và<revocation-reason> bằng thông tin của riêng 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 đầu ra của stack CloudFormation dưới tên PCAARN. Số serial của certificate được liệt kê trong bảng DynamoDB cho mỗi máy chủ như đã đề cập trước đó. Những lý do thu hồi có thể là một trong những giá trị có thể là:

  • 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.

Manually rotate certificates

Các certificate được thiết lập hết hạn hàng tuần và được luân phiên vào ngày hết hạn. Nếu bạn cần thay thế chứng chỉ theo 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 Figure 12). Trong lần chạy hàm Lambda tiếp theo, việc thiếu ngày hết hạn sẽ khiến certificate cho máy chủ đó bị thay thế. Để gia hạn ngay certificate hoặc kiểm tra chức năng xoay, hãy xóa ngày hết hạn khỏi bảng DynamoDB và chạy lệnh gọi Lambda sau. Sau khi các certificate đã được luân 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

Kết luận

Với việc sử dụng AWS IAM Roles Anywhere, các hệ thống bên ngoài AWS có thể sử dụng xác thực ngắn dưới hình thức x509 certificates trao đổi với xác thực AWS STS. Điều này có thể giúp bạn cải thiện tính bảo mật của mình trong môi trường kết hợp bằng cách giảm việc sử dụng 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 hiện chưa có PKI doanh nghiệp, giải pháp được mô tả trong bài đăng này cung cấp phương pháp tạo và luân chuyển chứng chỉ tự động bằng cách sử dụng AWS Private CA và AWS Systems Manager. Chúng tôi đã chỉ cho bạn cách có thể sử dụng Systems Manager để thiết lập máy chủ không phải AWS có certificate để sử dụng với IAM Roles Anywhere và đảm bảo chúng được luân chuyển thường xuyên.

Triển khai giải pháp này ngay hôm nay và chuyển đến IAM Roles Anywhere để loại bỏ thông tin đăng nhập dài hạn cho truy cập chương trình. Để biết thêm thông tin, hãy xem bài viết trên blog về IAM Roles Anywhere hoặc đặt câu hỏi của bạn trên AWS re:Post.