Azure Key Vault là một cách tuyệt vời để bảo vệ bí mật của bạn nhưng trong khi bạn đang làm việc trên các mẫu ARM để triển khai môi trường của mình, thỉnh thoảng bạn sẽ cần quyền truy cập vào Key Vault để xác minh nội dung của nó hoặc thiết lập các bí mật mới
Thêm một chính sách trong Azure Portal
Điều này đủ dễ dàng khi bạn có quyền truy cập Azure Active Directory; . Tuy nhiên, đôi khi bạn phải làm việc trong những điều kiện khắt khe hơn khi không được phép truy cập AAD. Cổng Azure thậm chí sẽ không cho phép bạn chọn tài khoản của riêng mình
Không có quyền truy cập vào AAD có nghĩa là không có chính sách mới trong Azure Portal
Hộp thoại lựa chọn chính sẽ hiển thị cho bạn một lỗi như
Graph call failed with httpCode=Forbidden, errorCode=Authorization_RequestDenied, errorMessage=Insufficient privileges to complete the operation., reason=Forbidden
Thêm chính sách thông qua Azure CLI
Bạn vẫn có thể cấp cho mình quyền truy cập bằng Azure CLI
az keyvault set-policy –n my-vault –-secret-permissions list get set delete –object-id [my-aad-guid]
là các chi tiết đầy đủ về lệnh đó
Khi bạn không có quyền truy cập vào Azure AD, bạn cũng sẽ gặp một chút khó khăn khi tìm id đối tượng cho tài khoản [khách] của mình. May mắn thay, bạn cũng có thể tìm thấy id đó bằng Azure CLI
az ad signed-in-user show --query objectId
Đảm bảo rằng bạn đã đăng nhập bằng đăng nhập az và chọn đăng ký Azure phù hợp bằng cách sử dụng bộ tài khoản az
Azure Key Vault giúp các nhóm lưu trữ và quản lý an toàn thông tin nhạy cảm như khóa, mật khẩu, chứng chỉ, v.v. , trong một bộ lưu trữ tập trung được bảo vệ bằng các thuật toán tiêu chuẩn ngành, độ dài khóa và thậm chí cả các mô-đun bảo mật phần cứng. Điều này ngăn chặn việc tiết lộ thông tin thông qua mã nguồn, một lỗi phổ biến mà nhiều nhà phát triển mắc phải. Nhiều nhà phát triển để lại các chi tiết bí mật như chuỗi kết nối cơ sở dữ liệu, mật khẩu, khóa riêng, v.v. , trong mã nguồn của họ mà khi bị người dùng ác ý lấy được có thể dẫn đến hậu quả không mong muốn. Quyền truy cập vào kho lưu trữ khóa yêu cầu xác thực và ủy quyền thích hợp và với RBAC, các nhóm thậm chí có thể kiểm soát chi tiết ai có quyền gì đối với dữ liệu nhạy cảm
Những gì được bảo hiểm trong phòng thí nghiệm này
Trong phòng thí nghiệm này, bạn sẽ thấy cách bạn có thể sử dụng Azure Key Vault trong quy trình bán hàng
- Chúng tôi sẽ tạo một kho khóa, từ cổng Azure, để lưu trữ mật khẩu máy chủ MySQL
- Chúng tôi sẽ định cấu hình quyền để cho phép hiệu trưởng dịch vụ đọc giá trị
- Chúng tôi sẽ truy xuất mật khẩu trong một đường dẫn Azure và chuyển sang các tác vụ tiếp theo
Trước khi bắt đầu
Tham khảo trang Bắt đầu trước khi bạn bắt đầu làm theo các bài tập
Sử dụng Azure DevOps Demo Generator để cung cấp dự án trên tổ chức Azure DevOps của bạn. URL này sẽ tự động chọn mẫu Azure Key Vault trong trình tạo bản demo. Nếu bạn muốn thử các dự án khác, thay vào đó hãy sử dụng URL này -azuredevops generator
Làm theo hướng dẫn đơn giản để biết cách sử dụng Azure DevOps Demo Generator
Nhiệm vụ 1. Tạo hiệu trưởng dịch vụ
Bạn sẽ cần một dịch vụ chính để triển khai một ứng dụng cho tài nguyên Azure từ Azure Pipelines. Vì chúng tôi sẽ truy xuất các bí mật trong một đường dẫn, nên chúng tôi sẽ cần cấp quyền cho dịch vụ khi chúng tôi tạo kho lưu trữ khóa
Nguyên tắc dịch vụ được Azure Pipeline tự động tạo khi bạn kết nối với đăng ký Azure từ bên trong định nghĩa đường ống hoặc khi bạn tạo kết nối dịch vụ mới từ trang cài đặt dự án. Bạn cũng có thể tự tạo dịch vụ chính từ cổng thông tin hoặc sử dụng Azure CLI và sử dụng lại nó trong các dự án. Bạn nên sử dụng hiệu trưởng dịch vụ hiện có khi muốn có một bộ quyền được xác định trước
Chúng tôi sẽ tạo thủ công bằng cách sử dụng Azure CLI. Nếu bạn đã có hiệu trưởng dịch vụ, bạn có thể bỏ qua nhiệm vụ này
Đăng nhập vào Cổng thông tin Azure
Mở vỏ đám mây Azure. Chọn Bash khi được nhắc chọn shell
Nhập lệnh sau bằng cách thay thế ServicePrincipalName bằng giá trị mong muốn của bạn
az ad sp create-for-rbac -n ServicePrincipalName
Nó sẽ cung cấp cho bạn một đầu ra JSON như trong hình. Sao chép đầu ra vào notepad hoặc tệp văn bản. Bạn sẽ cần chúng sau này
Nhập lệnh sau để nhận Azure SubscriptionID và sao chép ID và tên đăng ký vào notepad
az account show
Nhiệm vụ 2. Tạo kho khóa
Tiếp theo, chúng ta sẽ tạo một key vault trong Azure. Đối với kịch bản phòng thí nghiệm này, chúng tôi có một ứng dụng nút kết nối với cơ sở dữ liệu MySQL nơi chúng tôi sẽ lưu trữ mật khẩu cho cơ sở dữ liệu MySQL dưới dạng bí mật trong kho khóa
Nếu chưa đăng nhập, hãy đăng nhập vào Azure Portal
Nhập "Key vault" vào trường tìm kiếm và nhấn enter. Chọn Key Vaults trong dịch vụ
Chọn Tạo hoặc nút Tạo kho lưu trữ khóa để tạo kho lưu trữ khóa mới
Cung cấp tên, đăng ký, nhóm tài nguyên và vị trí cho kho tiền
Vì dữ liệu trong Kho lưu trữ chính rất nhạy cảm và quan trọng đối với doanh nghiệp, nên bạn cần đảm bảo quyền truy cập vào kho lưu trữ khóa của mình bằng cách chỉ cho phép các ứng dụng và người dùng được ủy quyền. Để truy cập dữ liệu từ vault, bạn sẽ cần cung cấp quyền đọc [Nhận] cho dịch vụ chính mà bạn sẽ sử dụng để xác thực trong quy trình
Chọn Chính sách truy cập rồi chọn + Thêm chính sách truy cập để thiết lập chính sách mới
Bạn sẽ cần chỉ định quyền mà bạn định cấp cho ứng dụng. Đây có thể là quyền quản lý khóa và dữ liệu [bí mật]. Trong mọi trường hợp, các ứng dụng có thể truy cập kho khóa theo hai cách
Truy cập người dùng + ứng dụng. Quyền truy cập được cấp cho những người dùng cụ thể, những người sau đó có thể được phép sử dụng bất kỳ ứng dụng nào hoặc có thể bị hạn chế sử dụng một ứng dụng cụ thể
Quyền truy cập chỉ dành cho ứng dụng. Quyền truy cập được cấp cho ứng dụng có thể chạy dưới dạng dịch vụ trình nền hoặc công việc nền
Chọn Chọn hiệu trưởng và tìm kiếm hiệu trưởng bảo mật mà bạn đã tạo trước đó và chọn nó. Bạn có thể tìm kiếm theo tên hoặc ID của hiệu trưởng
Tiếp theo, chúng tôi sẽ chọn quyền được cấp. Hiện tại, chúng tôi sẽ chỉ cung cấp quyền chỉ đọc [Nhận, Liệt kê] cho các bí mật mà thôi
Nhấp vào Xem lại + tạo để đóng các cánh đang mở và chọn Tạo để tạo kho tiền
Chỉ mất vài phút để dịch vụ được tạo. Khi nó được cung cấp, hãy chọn kho khóa và thêm bí mật mới. Hãy đặt tên cho nó là sqldbpassword. Cung cấp bất kỳ giá trị nào sẽ được chấp nhận làm mật khẩu cho cơ sở dữ liệu MySQL
nhiệm vụ 3. Kiểm tra đường ống Azure
Bây giờ, hãy chuyển đến dự án Azure DevOps mà bạn đã cung cấp bằng cách sử dụng Trình tạo bản demo Azure DevOps và định cấu hình Azure Pipelines để đọc bí mật từ kho lưu trữ khóa
Điều hướng đến dự án Azure DevOps
Chọn đường ống. Đường ống dẫn từ thanh điều hướng bên trái
Để kích hoạt bản dựng, hãy chọn định nghĩa SmartHotel-CouponManagement-CI rồi Chạy đường ống để xếp hàng theo cách thủ công
Ghi chú. Chúng tôi cũng có một quy trình xây dựng YAML nếu đó là điều bạn quan tâm. Để tiếp tục thông qua quy trình YAML, hãy chọn SmartHotel-CouponManagement-CI-YAML và nhấp vào Chỉnh sửa. Nếu bạn sử dụng quy trình YAML, hãy đảm bảo cập nhật liên kết tạo tác của định nghĩa phát hành SmartHotel-CouponManagement-CD
Chuyển đến Bản phát hành trong Đường ống, sau đó chọn và Chỉnh sửa định nghĩa SmartHotel-CouponManagement-CD
Trong Nhiệm vụ, hãy lưu ý rằng định nghĩa phát hành cho giai đoạn Nhà phát triển có nhiệm vụ Azure Key Vault. Tác vụ này tải xuống Bí mật từ Azure Key Vault. Bạn sẽ cần trỏ đến đăng ký và tài nguyên Azure Key Vault được tạo trước đó trong phòng thí nghiệm
Bạn cần ủy quyền cho quy trình triển khai lên Azure. Các quy trình Azure có thể tự động tạo kết nối dịch vụ với dịch vụ chính mới, nhưng chúng tôi muốn sử dụng dịch vụ mà chúng tôi đã tạo trước đó. Nhấp vào Quản lý, thao tác này sẽ chuyển hướng đến trang Kết nối dịch vụ
Nhấp vào Kết nối dịch vụ mới -> Trình quản lý tài nguyên Azure -> Hiệu trưởng dịch vụ [thủ công]. Điền thông tin từ dịch vụ chính đã tạo trước đó
- Id đăng ký và tên. có thể được tìm thấy trong trang tổng quan tài nguyên keyvault
- Id chính của dịch vụ = AppId trong ghi chú đã sao chép
- Khóa chính của dịch vụ = Mật khẩu trong ghi chú đã sao chép
- TenantId, sao chép từ các ghi chú
Nhấp vào Xác minh để kiểm tra xem nó có hoạt động không, đặt tên cho kết nối và nhấp vào Xác minh và Lưu
Chọn kết nối Dịch vụ mà bạn đã tạo ở bước trước cho đăng ký Azure trong tác vụ Azure Key Vault
Bạn có thể nhập tên hoặc chọn kho lưu trữ khóa mà bạn đã tạo từ trình đơn thả xuống
Trong trường bộ lọc Bí mật, bạn có thể chỉ định dấu hoa thị [*] để đọc tất cả các bí mật hoặc nếu chỉ muốn những bí mật cụ thể, bạn có thể cung cấp tên của các bí mật dưới dạng giá trị được phân tách bằng dấu phẩy
Khi chạy, Azure Pipelines sẽ tìm nạp các giá trị bí mật mới nhất và đặt chúng làm biến tác vụ có thể được sử dụng trong các tác vụ sau, điều đó có nghĩa là mật khẩu chúng tôi đã lưu trữ trước đó có thể được đọc bằng cách sử dụng $[sqldbpassword]
Chúng tôi chuyển giá trị này trong tác vụ tiếp theo, Triển khai Azure nơi chúng tôi triển khai mẫu ARM
Lưu ý trường Ghi đè tham số mẫu có tên người dùng cơ sở dữ liệu dưới dạng chuỗi nhưng giá trị mật khẩu được chuyển dưới dạng biến
-webAppName $[webappName] -mySQLAdminLoginName "azureuser" -mySQLAdminLoginPassword $[sqldbpassword]
Điều này sẽ cung cấp cơ sở dữ liệu MySQL được xác định trong mẫu ARM bằng mật khẩu mà bạn đã chỉ định trong kho khóa
Bạn có thể muốn hoàn thành định nghĩa quy trình bằng cách chỉ định đăng ký và vị trí cho nhiệm vụ. Lặp lại tương tự cho tác vụ cuối cùng trong quy trình Triển khai dịch vụ ứng dụng Azure. Cuối cùng, lưu và tạo một bản phát hành mới để bắt đầu triển khai
Ghi chú. Bạn có thể thắc mắc rằng chúng tôi có thể đã chuyển giá trị dưới dạng một biến nhiệm vụ bí mật trong Azure Pipelines. Mặc dù điều đó là có thể, nhưng các biến tác vụ dành riêng cho một đường dẫn và không thể được sử dụng bên ngoài định nghĩa mà nó được tạo. Ngoài ra, trong hầu hết các trường hợp, các bí mật như thế này được xác định bởi Người vận hành, những người có thể không muốn đặt bí mật này cho mọi đường ống
Thử thách tập thể dục
Hãy thử tạo một bí mật mới để lưu trữ tên người dùng cho Cơ sở dữ liệu MySQL và thay đổi đường dẫn để tìm nạp và sử dụng bí mật