Bài viết này cung cấp một hướng dẫn chuyên sâu về cách sử dụng xác thực RSA thay vì mật khẩu truyền thống trong quy trình Azure DevOps khi làm việc với Flyway và Snowflake. Việc chuyển đổi sang xác thực RSA giúp tăng cường bảo mật đáng kể cho quy trình phát triển và triển khai của bạn. Chúng ta sẽ đi qua từng bước, từ tạo khóa RSA, cấu hình Azure DevOps, đến tích hợp với Flyway và Snowflake. Nếu bạn đang tìm cách nâng cao tính bảo mật và tự động hóa quy trình DevOps, bài viết này là dành cho bạn.
Xác thực bằng mật khẩu truyền thống có thể dễ bị tấn công brute-force hoặc phishing. Xác thực RSA, sử dụng cặp khóa công khai và khóa bí mật, cung cấp một lớp bảo mật mạnh mẽ hơn nhiều. Khóa bí mật chỉ được lưu trữ trên máy của bạn và không bao giờ được chia sẻ, trong khi khóa công khai được tải lên hệ thống Azure DevOps để xác minh. Điều này giúp giảm thiểu rủi ro bị đánh cắp thông tin đăng nhập và truy cập trái phép.
Sử dụng công cụ `ssh-keygen` để tạo cặp khóa RSA. Đảm bảo chọn độ dài khóa tối thiểu 2048 bit để đảm bảo an toàn. Nên sử dụng các thuật toán mã hóa mạnh như `rsa-sha2-256` hoặc `rsa-sha2-512`.
ssh-keygen -t rsa-sha2-512 -b 4096 -C "your_email@example.com"
Lưu ý: Nên tạo mật khẩu cho khóa bí mật để tăng cường bảo mật. Mật khẩu này sẽ được yêu cầu mỗi khi bạn sử dụng khóa bí mật để xác thực.
Đăng nhập vào tài khoản Azure DevOps của bạn. Truy cập vào "User settings" (biểu tượng hình đại diện ở góc trên bên phải) và chọn "SSH public keys". Thêm khóa công khai (nội dung của file `.pub`) vào Azure DevOps. Lưu ý: Không thêm bất kỳ khoảng trắng hoặc dòng mới nào vào trường "Public Key Data".
Sử dụng lệnh `ssh -T git@ssh.dev.azure.com` để kiểm tra kết nối SSH. Nếu kết nối thành công, bạn sẽ nhận được thông báo xác thực. Lần đầu tiên kết nối, bạn có thể được yêu cầu xác minh fingerprint của máy chủ. Hãy so sánh fingerprint này với fingerprint hiển thị trên trang "SSH Public Keys" trong Azure DevOps.
Bây giờ chúng ta sẽ cấu hình Flyway để sử dụng khóa RSA để xác thực với Snowflake trong Azure DevOps pipelines.
Không bao giờ lưu trữ khóa bí mật trực tiếp trong code hoặc pipeline của bạn. Sử dụng Azure DevOps variable groups và secret variables để lưu trữ khóa bí mật một cách an toàn. Đặt tên cho biến này một cách rõ ràng, ví dụ: `SNOWFLAKE_PRIVATE_KEY`.
Khóa bí mật thường chứa ký tự `@` và dòng mới, điều này có thể gây ra vấn đề khi sử dụng trong Azure DevOps pipelines. Sử dụng một task PowerShell để định dạng lại khóa bí mật.
- task: PowerShell@2
displayName: "Format Private Key"
name: setPrivateKey
inputs:
targetType: inline
script: |
$formattedKey = "$(SNOWFLAKE_PRIVATE_KEY)" -replace "@", "`n"
Write-Host "##vso[task.setvariable variable=formattedKey;isOutput=true]$formattedKey"
Write-Host "Formatted key value stored"
Đoạn code trên thay thế tất cả các ký tự `@` bằng dòng mới (`\n`) và lưu trữ khóa đã định dạng trong một biến output có tên `formattedKey`.
Sử dụng task Flyway trong pipeline của bạn. Truyền các thông tin cần thiết, bao gồm JDBC URL, username, và khóa bí mật đã được định dạng.
- task: FlywayCLI@0
displayName: 'Flyway Migrate'
inputs:
command: 'migrate'
workingDirectory: '$(Pipeline.Workspace)/flyway'
url: 'jdbc:snowflake://your_account.snowflakecomputing.com/?warehouse=$(SNOWFLAKE_WAREHOUSE)&db=$(SNOWFLAKE_DATABASE)&schema=$(SNOWFLAKE_SCHEMA)&role=$(SNOWFLAKE_ROLE)&authenticator=snowflake_jwt'
user: '$(SNOWFLAKE_USER)'
password: '$(setPrivateKey.formattedKey)'
commandOptions: '-X'
**Quan trọng:** * Đảm bảo rằng JDBC URL bao gồm `&authenticator=snowflake_jwt` để chỉ định sử dụng xác thực JWT (JSON Web Token) với Snowflake. * Sử dụng biến output `$(setPrivateKey.formattedKey)` để truyền khóa bí mật đã được định dạng.
Nếu bạn gặp lỗi "Private key provided is invalid or not supported", hãy đảm bảo rằng bạn đang sử dụng định dạng khóa RSA chính xác và rằng JDBC driver Snowflake được cập nhật lên phiên bản mới nhất. Kiểm tra kỹ các biến pipeline của bạn để đảm bảo rằng khóa bí mật được truyền chính xác và không bị cắt ngắn.
Việc sử dụng xác thực RSA thay vì mật khẩu trong Azure DevOps với Flyway trên Snowflake là một bước quan trọng để tăng cường bảo mật cho quy trình DevOps của bạn. Bằng cách làm theo các bước được nêu trong bài viết này, bạn có thể triển khai một giải pháp xác thực an toàn và hiệu quả, giảm thiểu rủi ro bảo mật và tự động hóa quy trình triển khai cơ sở dữ liệu của bạn.
Bài viết liên quan