0
0
Lập trình
Admin Team
Admin Teamtechmely

Dọn dẹp tài nguyên AWS bằng AWS-Nuke hiệu quả

Đăng vào 4 tháng trước

• 9 phút đọc

Dọn dẹp tài nguyên AWS bằng AWS-Nuke hiệu quả

AWS-Nuke là một công cụ mã nguồn mở, được thiết kế để tự động hóa việc loại bỏ các tài nguyên AWS trong một tài khoản. Nó có thể được sử dụng để nhanh chóng và an toàn xóa tất cả tài nguyên trong một tài khoản AWS nhất định, hoặc có thể được tùy chỉnh để xóa các loại tài nguyên cụ thể dựa trên các quy tắc do người dùng xác định.

AWS-Nuke là gì?

Dù bạn đang khởi tạo môi trường thử nghiệm hay ngừng hoạt động một dự án cũ, AWS-Nuke đặc biệt hữu ích cho việc giữ cho các tài khoản AWS sạch sẽ, đảm bảo rằng các tài nguyên cũ không sử dụng không tích tụ lại, dẫn đến chi phí vượt mức, rủi ro bảo mật và độ phức tạp không cần thiết.

AWS-Nuke là một công cụ dòng lệnh hỗ trợ nhiều dịch vụ AWS và có thể chạy từ bất kỳ máy nào có quyền truy cập vào thông tin xác thực AWS.

Tại sao nên sử dụng AWS-Nuke?

Trước khi đi vào chi tiết kỹ thuật của AWS-Nuke, điều quan trọng là phải hiểu tại sao công cụ này lại hữu ích.

  • Quản lý chi phí: Một trong những thách thức lớn nhất trong môi trường đám mây là quản lý chi phí. AWS tính phí dựa trên tài nguyên bạn sử dụng, và đôi khi các tài nguyên không còn sử dụng lại bị lãng quên và để chạy. Bằng cách sử dụng AWS-Nuke, bạn có thể thường xuyên dọn dẹp các tài nguyên cũ, đảm bảo rằng bạn chỉ trả cho những gì bạn thực sự sử dụng.

  • Dọn dẹp môi trường: Trong các môi trường phát triển và thử nghiệm, các tài nguyên thường được tạo ra, sửa đổi và để lại mà không được xóa đúng cách. AWS-Nuke có thể giúp thường xuyên loại bỏ những tài nguyên không cần thiết trong các môi trường này, giúp dễ dàng quản lý hạ tầng hơn.

  • Bảo mật: Các tài nguyên để chạy trong thời gian dài có thể gây ra rủi ro bảo mật. Ví dụ, các phiên bản EC2 không sử dụng, nhóm bảo mật hoặc bucket S3 có thể làm lộ môi trường của bạn trước các cuộc tấn công. AWS-Nuke giúp giảm thiểu các rủi ro như vậy bằng cách dọn dẹp các tài nguyên không sử dụng.

  • Tự động hóa: AWS-Nuke cung cấp khả năng tự động hóa, giúp dễ dàng tích hợp vào các pipeline tích hợp liên tục (CI) hoặc các công việc theo lịch để dọn dẹp tài khoản định kỳ.

  • Đơn giản hóa: Với hàng trăm dịch vụ và tài nguyên AWS cần quản lý, AWS-Nuke đơn giản hóa tác vụ dọn dẹp tài nguyên bằng cách cung cấp một cách tập trung và tự động để thực hiện xóa.

Cách thức hoạt động của AWS-Nuke

AWS-Nuke hoạt động bằng cách quét tất cả các tài nguyên trong tài khoản AWS của bạn và sau đó xóa chúng dựa trên một tệp cấu hình. Bạn có thể cấu hình AWS-Nuke để xóa các loại tài nguyên cụ thể hoặc để để lại một số tài nguyên quan trọng không bị chạm tới.

AWS-Nuke sử dụng AWS SDK để liệt kê và xóa tài nguyên. Nó có thể xử lý một loạt các dịch vụ AWS, bao gồm nhưng không giới hạn ở:

  • EC2 Instances
  • S3 Buckets
  • RDS Instances
  • IAM Users và Roles
  • VPCs
  • Elastic Load Balancers
  • CloudWatch Alarms
  • CloudFormation Stacks
  • ECR Repositories

Cấu hình

AWS-Nuke sử dụng một tệp cấu hình YAML để chỉ định các tài nguyên nào nên hoặc không nên bị xóa. Tệp cấu hình này có thể tùy chỉnh cao, cho phép người dùng nhắm mục tiêu các tài nguyên AWS cụ thể trong khi để lại các tài nguyên khác nguyên vẹn.

Dưới đây là một ví dụ đơn giản về cấu hình AWS-Nuke:

yaml Copy
regions:
  - "us-east-1"
  - "us-west-2"

resource-types:
  excludes:
    - EC2::KeyPair
    - IAM::Role
    - IAM::User

Cấu hình này chỉ định rằng AWS-Nuke chỉ nên chạy trong các khu vực us-east-1 và us-west-2, và nó sẽ không xóa các EC2 Key Pairs, IAM Roles và IAM Users.

Chế độ chạy thử (Dry-Run Mode)

Một trong những tính năng hữu ích nhất của AWS-Nuke là chế độ chạy thử, cho phép người dùng xem những tài nguyên nào sẽ bị xóa mà không thực sự xóa chúng. Điều này hữu ích cho việc xem xét kết quả của một lần dọn dẹp trước khi thực hiện bất kỳ thay đổi không thể đảo ngược nào.

Để chạy AWS-Nuke trong chế độ chạy thử, chỉ cần sử dụng cờ --dry-run:

Copy
aws-nuke --config config.yml --dry-run

Lệnh này sẽ xuất ra danh sách các tài nguyên mà AWS-Nuke sẽ xóa dựa trên tệp cấu hình, mà không thực sự thực hiện xóa.

Chạy AWS-Nuke

Khi bạn đã tự tin với cấu hình của mình, việc chạy AWS-Nuke rất đơn giản. Đầu tiên, hãy đảm bảo bạn có thông tin xác thực AWS đúng cho tài khoản mà bạn muốn dọn dẹp. Sau đó, sử dụng lệnh sau:

Copy
aws-nuke --config config.yml

Lệnh này sẽ xóa tất cả các tài nguyên trong tài khoản, ngoại trừ những tài nguyên đã được loại trừ trong cấu hình.

Quản lý phụ thuộc tài nguyên

AWS-Nuke cũng xử lý các phụ thuộc tài nguyên. Ví dụ, nó sẽ không xóa một bucket S3 cho đến khi tất cả các đối tượng trong bucket đó đã được xóa. Điều này đảm bảo rằng các tài nguyên AWS được xóa theo thứ tự đúng, ngăn chặn lỗi và xóa không thành công.

Tham gia vào AWS-Nuke

Khi chạy AWS-Nuke cục bộ với hồ sơ AWS, tôi gặp lỗi:

Copy
aws_nuke_v2 -c config/nuke-config.yaml --profile personal_profile
Error: failed get caller identity: NoCredentialProviders: no valid providers in chain. Deprecated.

Sau khi kiểm tra các nguồn, tôi thấy rằng hồ sơ có mặt trong các tham số cho AWS-Nuke, nhưng chưa được triển khai. Tôi đã thêm tính năng này vào AWS-Nuke:

go Copy
if params.Profile != "" {
    cfg, err := awsSDKConfig.LoadDefaultConfig(context.TODO(), awsSDKConfig.WithSharedConfigProfile(params.Profile))
    if err != nil {
        log.Fatalf("unable to load SDK config, %v", err)
    }
    log.Infof("using profile %v", params.Profile)
}

Giờ đây, AWS-Nuke xử lý đúng tham số --profile và sẵn sàng chạy.

Làm việc với tính năng hồ sơ đã triển khai:

Copy
go run main.go -c config/nuke-config.yaml --profile personal_account

INFO[0000] using profile personal_account

Công cụ sẽ truy vấn các tài nguyên hiện có, khớp chúng với các bộ lọc mà chúng tôi đã cấu hình trong phần loại trừ và sẽ thực hiện chạy thử.

Tài nguyên mà chúng tôi muốn giữ lại trong tài khoản

Giả sử chúng tôi không muốn ảnh hưởng đến người dùng IAM/ quyền/ chính sách, cũng như các thiết bị MFA và một số bản ghi Route53. Tất cả các tài nguyên này nên được công bố trong cấu hình AWS-Nuke, vì vậy khi chạy nó sẽ không chạm đến chúng.

yaml Copy
regions:
  - eu-east-1
  - global

accounts:
  123456789012:
    filters:
      PolicyName:
        - property: "UserName"
          - value: "aws-cli"
      IAMRole:
        - "OrganizationAccountAccessRole"
      IAMRolePolicyAttachment:
        - "OrganizationAccountAccessRole"
        - property: arn
        - value: "arn:aws:iam::aws:policy/AdministratorAccess"
      IAMUser:
        - "admin"
        - "aws-cli"
      IAMUserAccessKey:
        - property: UserName
          value: "aws-cli"
      IAMUserPolicyAttachment:
        - property: "arn"
          - value: "arn:aws:iam::aws:policy/AdministratorAccess"
      IAMVirtualMFADevice:
        - property: arn
          - value: "arn:aws:iam::123456789012:mfa/to.root.iphone"
      Route53HostedZone:
        - property: "Name"
          - value: "xxxxx.xx."

account-blocklist:
  - 1234567890

resource-types:
  excludes:
    - Route53ResourceRecordSet
    - Route53HostedZone

Xem xét tài nguyên trong đầu ra

Copy
...
global - IAMPolicy - arn:aws:iam::123456789012:policy/terraform-20230725102234859300000005 - [ARN: "arn:aws:iam::123456789012:policy/terraform-20230725102234859300000005", Name: "terraform-20230725102234859300000005", Path: "/"] - would remove

Scan complete: 44 total, 13 nukeable, 31 filtered.

Thực hiện dọn dẹp

Copy
go run main.go -c config/nuke-config.yaml --profile personal_account --no-dry-run

INFO[0000] using profile personal_account

Đầu tiên, AWS-Nuke sẽ quét như trong chế độ chạy thử, và cũng đề xuất xác nhận việc xóa.

Công cụ có một số vấn đề trong việc xóa IAM - nó có logic để thử lại nhưng không hiểu các phụ thuộc tài nguyên. Ví dụ, nó không thể xóa vai trò với các chính sách đính kèm mà nó cũng nên xóa:

Copy
ERRO[0373] DeleteConflict: Cannot delete entity, must detach all policies first.

Tích hợp với CI/CD

Một trong những trường hợp sử dụng tốt nhất cho AWS-Nuke là tích hợp nó vào pipeline CI/CD. Bạn có thể sử dụng AWS-Nuke như một phần của quy trình tích hợp liên tục để dọn dẹp các môi trường thử nghiệm sau khi chạy thử nghiệm. Điều này đảm bảo rằng không có tài nguyên không cần thiết nào còn lại sau khi thử nghiệm hoàn tất, giữ cho môi trường của bạn sạch sẽ và chi phí của bạn được kiểm soát.

Dưới đây là một ví dụ về cách bạn có thể tích hợp AWS-Nuke vào pipeline CI/CD:

  • Chạy AWS-Nuke trong chế độ chạy thử trước khi triển khai phiên bản mới của ứng dụng của bạn để đảm bảo không có tài nguyên không cần thiết nào còn lại từ các thử nghiệm trước đó.
  • Sau khi triển khai và thử nghiệm hoàn tất, chạy AWS-Nuke trong chế độ đầy đủ để dọn dẹp tất cả tài nguyên.

Kết luận

AWS-Nuke là một công cụ mạnh mẽ và linh hoạt để dọn dẹp các môi trường AWS. Nó giúp ngăn ngừa chi phí vượt mức, giảm rủi ro bảo mật và đơn giản hóa việc quản lý các tài nguyên AWS. Dù bạn đang quản lý một môi trường phát triển, thực hiện thử nghiệm, hay ngừng hoạt động một dự án cũ, AWS-Nuke cung cấp một cách hiệu quả để tự động hóa quy trình dọn dẹp.

Tuy nhiên, AWS-Nuke cũng yêu cầu cấu hình cẩn thận để tránh xóa các tài nguyên quan trọng. Luôn sử dụng chế độ chạy thử để xem xét các xóa bỏ trước khi thực hiện bất kỳ thay đổi nào, và đảm bảo rằng tệp cấu hình của bạn phản ánh chính xác môi trường của bạn.

Trong thời đại mà các tài nguyên đám mây có thể phát triển theo cấp số nhân, các công cụ như AWS-Nuke là rất cần thiết để giữ cho cơ sở hạ tầng của bạn gọn gàng và hiệu quả.

Liên kết tham khảo:

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào