Các bí mật như khóa mã hóa và thông tin đăng nhập không nên được kiểm tra trong kiểm soát nguồn vì một vài lý do. Đầu tiên rõ ràng là các khóa mã hóa và thông tin đăng nhập phải luôn luôn cần phải biết và kiểm soát nguồn không phải là cách đáng tin cậy để bảo vệ thông tin khỏi bị tiết lộ. Lý do khác khiến bạn không muốn có những bí mật như vậy trong kiểm soát nguồn của mình thường là vì các bí mật thường (nhưng không phải luôn luôn) đặc trưng cho một thuộc tính nhất định của môi trường mà ứng dụng của bạn sẽ chạy. (Ví dụ: Lấy khóa riêng để tạo kỹ thuật số chữ ký cần thiết cho ủy quyền dịch vụ web, điểm cuối cụ thể của dịch vụ web đó có thể đang chạy trong môi trường QA yêu cầu chữ ký QA).
Cách chính xác để xử lý một môi trường (hoặc bí mật toàn cầu) là đối xử với nó giống như bất kỳ thuộc tính cấu hình môi trường nào khác, với các điều khiển bảo mật bổ sung cho biện pháp tốt. Một mô-đun mã được thiết kế tốt, độc lập và có thể phiên bản phải giống hệt nhau giữa các môi trường sao cho môi trường chúng được triển khai để thông báo cho ứng dụng về các thuộc tính của nó (Ví dụ: chi tiết kết nối cơ sở dữ liệu, thông tin xác thực, điểm cuối dịch vụ web, đường dẫn tệp, v.v.) các chi tiết cấu hình quan trọng cho ứng dụng của bạn được đưa ra ngoài và trở thành các tham số cấu hình của môi trường của bạn.
Bây giờ để giải quyết một số đối số của bạn:
Nói chung, không phải chúng ta chỉ di chuyển vấn đề?
Không có thứ gọi là bảo mật hoàn hảo, tuy nhiên "chuyển" vấn đề sang một khu vực có thể áp dụng các biện pháp và kiểm soát bổ sung sẽ cải thiện khó khăn và giảm khả năng tiết lộ bí mật hoặc vô tình tiết lộ bí mật. Một nguyên tắc tốt để tuân theo khi thiết kế một hệ thống trong đó dữ liệu bí mật phải được bảo vệ là luôn đặt các điều khiển trong twos. Điều tôi muốn nói là để đảm bảo rằng việc tiết lộ thông tin bí mật hoặc sự cố bảo mật xảy ra sau đó sẽ phải xảy ra sự cố hoặc trong hai hoặc nhiều biện pháp kiểm soát.
Một ví dụ điển hình của việc này có thể là lưu trữ một tệp được mã hóa trên máy chủ. Tôi cũng có một khóa giải mã bí mật mà tôi phải giữ bí mật trong một tệp khác.
- Lưu trữ khóa và tệp được mã hóa trong cùng một máy chủ (0 Điều khiển, bất kỳ ai có quyền truy cập vào máy chủ đều có thể thu được thông tin bí mật một cách tầm thường)
- Thực hiện các bước trên và bảo vệ quyền truy cập tệp vào cả hai tệp để người dùng thời gian chạy ứng dụng của HĐH chỉ có thể đọc được.
- Lưu trữ khóa trong kho khóa ngoài, lấy khóa bằng nhiều biện pháp bảo mật như liệt kê trắng địa chỉ IP, xác thực chứng chỉ và các biện pháp khác cho ứng dụng có thể truy cập tệp được mã hóa trên hệ thống tệp của nó. (Nhiều điều khiển, nhiều lỗi của kiểm soát bảo mật phải xảy ra để dữ liệu bí mật bị xâm phạm)
Một lần nữa, không có thứ gọi là bảo mật hoàn hảo nhưng mục tiêu có nhiều điều khiển đảm bảo rằng nhiều lỗi cần phải xảy ra để tiết lộ xảy ra.
Dường như với tôi rằng các sản phẩm như Azure KeyVault không tốt hơn và phức tạp hơn nhiều,
Có phức tạp, vô nghĩa là hoàn toàn chủ quan. Chúng ta không thể có một cuộc thảo luận về sự vô nghĩa của bảo mật bổ sung mà không tính đến thực tế về mức độ nghiêm trọng của dữ liệu bí mật sẽ bị lộ. Nếu ai đó có thể sử dụng dữ liệu bí mật để gửi chuyển khoản bất hợp pháp ra khỏi tổ chức tài chính của bạn thì một cái gì đó giống như một kho tiền chính là về thứ xa nhất từ vô nghĩa sẽ có.
hơn là giữ bí mật của bạn trong một tệp cấu hình riêng biệt và đảm bảo rằng nó nằm trong .gitignore hoặc tương đương của bạn.
Cho đến khi ai đó vô tình kiểm tra nó vào kiểm soát nguồn, bây giờ bí mật được nhúng trong lịch sử kiểm soát nguồn mãi mãi.
Tất nhiên, mọi người có thể sẽ gửi email cho nhau một cách không an toàn ...
Bảo mật không chỉ là vấn đề kỹ thuật, nó cũng là vấn đề của mọi người. Điều đó sẽ lạc đề tuy nhiên tôi cảm thấy vào thời điểm này bạn đang cố gắng tự nói ra những việc cần thiết.
Có cách nào để quản lý các bí mật không chỉ chuyển vấn đề không? Tôi tin rằng câu hỏi này có một câu trả lời được xác định rõ ràng. Tương tự, nếu tôi hỏi làm thế nào HTTPS không chuyển vấn đề, câu trả lời sẽ là các khóa CA được phân phối với HĐH của bạn và chúng tôi tin tưởng chúng vì chúng tôi tin tưởng phương thức phân phối của HĐH.
An ninh không phải lúc nào cũng khiến vấn đề biến mất, phần lớn thời gian nó đặt các điều khiển xung quanh chúng. Sự tương tự của bạn ngắn gọn bởi vì trên thực tế đó chính xác là những gì mật mã khóa công khai làm. Chúng tôi đang "chuyển vấn đề" sang CA bằng cách đặt niềm tin không được thừa nhận và hoàn toàn tin tưởng vào CA của chúng tôi để xác nhận danh tính của đơn vị sở hữu chứng chỉ công khai. Về cơ bản, không có gì thiếu một chuỗi thất bại thảm hại (ví dụ như mất niềm tin vào CA) sẽ phải xảy ra để dẫn đến một vấn đề bảo mật.
Cũng như nhiều thứ khác, bảo mật là một dòng bạn phải rút ra dựa trên các tiêu chí chủ quan, bản chất của dữ liệu, hậu quả của việc tiết lộ, khẩu vị rủi ro, ngân sách, v.v ...