Làm cách nào để sử dụng vault trong Python?

Vault là trình quản lý mật khẩu Python đơn giản. Nó cho phép bạn lưu bí mật một cách an toàn với giao diện CLI đơn giản

Cài đặt nâng cao

usage: vault [-h] [-t [CLIPBOARD_TTL]] [-p [HIDE_SECRET_TTL]]
             [-a [AUTO_LOCK_TTL]] [-v VAULT_LOCATION] [-c CONFIG_LOCATION]
             [-k] [-i IMPORT_ITEMS] [-x EXPORT] [-f [{json}]] [-e]

optional arguments:
  -h, --help            show this help message and exit
  -t [CLIPBOARD_TTL], --clipboard_TTL [CLIPBOARD_TTL]
                        Set clipboard TTL [in seconds, default: 15]
  -p [HIDE_SECRET_TTL], --hide_secret_TTL [HIDE_SECRET_TTL]
                        Set delay before hiding a printed password [in
                        seconds, default: 15]
  -a [AUTO_LOCK_TTL], --auto_lock_TTL [AUTO_LOCK_TTL]
                        Set auto lock TTL [in seconds, default: 900]
  -v VAULT_LOCATION, --vault_location VAULT_LOCATION
                        Set vault path
  -c CONFIG_LOCATION, --config_location CONFIG_LOCATION
                        Set config path
  -k, --change_key      Change master key
  -i IMPORT_ITEMS, --import_items IMPORT_ITEMS
                        File to import credentials from
  -x EXPORT, --export EXPORT
                        File to export credentials to
  -f [{json}], --file_format [{json}]
                        Import/export file format [default: 'json']
  -e, --erase_vault     Erase the vault and config file

Hashicorp's Vault đã trở thành công cụ tiêu chuẩn của ngành để quản lý bí mật. Nó đi kèm với nhiều giải pháp dành cho các công cụ hỗ trợ các phương pháp xác thực khác nhau, tích hợp bí mật và lưu trữ. Tuy nhiên, không phải mọi ứng dụng đều tích hợp công cụ bí mật của bên thứ nhất, bên thứ ba hoặc cộng đồng với Vault. Điều này đặc biệt đúng đối với các ứng dụng và phần mềm tùy chỉnh được phát triển nội bộ mà công ty của bạn có thể sử dụng trong nội bộ hoặc làm sản phẩm hướng tới khách hàng. Trong những tình huống này, bạn thường cần phát triển tích hợp tùy chỉnh với Vault

Các bài viết này sẽ hướng dẫn bạn cách phát triển tích hợp công cụ bảo mật tùy chỉnh cơ bản với Vault bằng từng ngôn ngữ trong bốn ngôn ngữ phổ biến. Giả định rằng bạn đã quen thuộc với các nguyên tắc cơ bản về quản trị cụm Vault, các công cụ Vault phổ biến và mã hóa bằng [các] ngôn ngữ bạn chọn được trình bày trong mỗi bài viết

Bài viết này sẽ tập trung vào tích hợp Vault tùy chỉnh được phát triển bằng Python. Lưu ý rằng phiên bản giả định của Python trong bài viết này là phiên bản tiêu chuẩn 3. 7-3. 9 phạm vi cho thời điểm viết bài này

Cài đặt ràng buộc

Vault có API REST được ghi lại đầy đủ và bạn chắc chắn có thể tương tác với nó thông qua các liên kết API REST trong ngôn ngữ ứng dụng. Tuy nhiên, các liên kết với API Vault đã tồn tại ở một số ngôn ngữ và những ngôn ngữ này nên được sử dụng vì những lợi thế rõ ràng của chúng. Trong phần này, chúng ta sẽ xem cách cài đặt các ràng buộc đó trong Python

Các ràng buộc Python cho Vault được cộng đồng phát triển và duy trì, nhưng vẫn được sử dụng phổ biến trên toàn trường. Họ thực hiện tất cả các chức năng dự kiến ​​mà bạn mong đợi trong một giao diện Pythonic rõ ràng. Chỉ cần thêm các hướng dẫn cài đặt tương đương cho các ràng buộc vào 

import setuptools

setup[
  ...
  install_requires=['hvac']
  ...
]
5 của bạn

import setuptools

setup[
  ...
  install_requires=['hvac']
  ...
]

và cài đặt nó như một phụ thuộc Python như bình thường

Python [Đọc tài liệu Tài liệu] cho các liên kết này khá tốt. Chúng được tổ chức tốt thành các danh mục bí mật, xác thực và hệ thống. Chúng cũng chứa các đoạn MCVE hướng dẫn tuyệt vời dành cho những người không quen thuộc với tài liệu liên kết và những người sẽ cảm thấy thoải mái hơn với các ví dụ

Xây dựng và xác thực ứng dụng khách

Bước đầu tiên trong việc tương tác với API Vault thông qua các ràng buộc là xây dựng ứng dụng khách cho giao diện. Sau khi xây dựng ứng dụng khách, phương thức thành viên để xác thực bằng mã thông báo có thể được gọi. Mã này thực sự giống nhau một cách đáng kể trên các ràng buộc ngôn ngữ khác nhau

Một quy trình dễ dàng và hiệu quả để khởi tạo ứng dụng khách Vault trong Python là thông qua hàm tạo lớp. Chúng tôi có thể chỉ định ứng dụng khách cho một biến thành viên và do đó không cần phải liên tục kết nối lại và xác thực lại với cụm Vault. Lưu ý rằng trong các bài viết trước về Go và Ruby, cấu trúc/đối tượng máy khách ở chế độ riêng tư theo mặc định. Tuy nhiên, trong Python, đối tượng này sẽ được mặc định công khai. Do đó, chúng tôi sử dụng kiểu cách 

import setuptools

setup[
  ...
  install_requires=['hvac']
  ...
]
6 để biểu thị thành viên nên được coi là riêng tư

Mặc dù mẫu thiết kế hàm tạo điển hình trong lập trình hướng đối tượng trả về một đối tượng lớp [thường là để khởi tạo bên ngoài], trong tình huống này, chúng tôi muốn máy khách ở chế độ riêng tư. Do đó, hàm tạo sẽ không trả về một đối tượng lớp, nhưng sẽ xây dựng thành công đối tượng lớp

Chúng tôi khởi tạo ứng dụng khách Vault cho biến thành viên tại địa chỉ đã chỉ định. Chúng tôi cũng cung cấp một phương thức thành viên để trả về một đối tượng máy khách được xác thực bằng mã thông báo Vault đầu vào

import os

import hvac


class Vault[]:
    """class for interfacing python with vault"""

    # constructor
    def __init__[self,
                 address: str = os.environ['VAULT_ADDR']] -> None:
        """instantiates and returns a vault client"""
        self.__client = hvac.Client[url=address]

    def token_auth[self,
                   token: str = os.environ['VAULT_TOKEN']] -> None:
        """authenticates a client with a vault token"""

        if len[token] != 26:
            raise RuntimeError['The Vault token is invalid']
        self.__client.token = token

Công cụ xác thực thay thế

Bạn có thể không muốn sử dụng công cụ Xác thực mã thông báo cơ bản [và có thể hiểu như vậy] để xác thực với ứng dụng khách Vault. Trong tình huống đó, chúng ta có thể sử dụng một vài lựa chọn thay thế

Trong phương pháp dưới đây, chúng tôi trình bày cách sử dụng xác thực LDAP. Tên người dùng và mật khẩu được nhập thông qua các biến môi trường trong quy trình để đảm bảo chi phí phát hiện tối thiểu. Sau đó, ứng dụng khách được xác thực bằng một phương thức 

import setuptools

setup[
  ...
  install_requires=['hvac']
  ...
]
7 được liên kết với công cụ xác thực 
import os

import hvac


class Vault[]:
    """class for interfacing python with vault"""

    # constructor
    def __init__[self,
                 address: str = os.environ['VAULT_ADDR']] -> None:
        """instantiates and returns a vault client"""
        self.__client = hvac.Client[url=address]

    def token_auth[self,
                   token: str = os.environ['VAULT_TOKEN']] -> None:
        """authenticates a client with a vault token"""

        if len[token] != 26:
            raise RuntimeError['The Vault token is invalid']
        self.__client.token = token
0. Phương thức này thực sự trả về một từ điển phản hồi có chứa mã thông báo xác thực, mã này sau đó được xác thực trong dòng mã cuối cùng

def ldap_auth[self,
              username: str = os.environ['LDAP_USERNAME'],
              password: str = os.environ['LDAP_PASSWORD']] -> None:
    """authenticates a client with ldap"""
    response = self.__client.auth.ldap.login[
        username=username,
        password=password
    ]

    if len[response['auth']['client_token']] != 26:
        raise RuntimeError['The returned Vault token from the LDAP authentication engine is invalid']

Trong phương pháp bên dưới, chúng tôi trình bày cách sử dụng xác thực AppRole bằng phương thức “push”. Chuyển id vai trò và id bí mật làm đối số đầu vào sẽ định cấu hình ứng dụng khách được xác thực theo vai trò và chính sách được liên kết. Chúng ta có thể sử dụng phương thức trợ giúp 

import os

import hvac


class Vault[]:
    """class for interfacing python with vault"""

    # constructor
    def __init__[self,
                 address: str = os.environ['VAULT_ADDR']] -> None:
        """instantiates and returns a vault client"""
        self.__client = hvac.Client[url=address]

    def token_auth[self,
                   token: str = os.environ['VAULT_TOKEN']] -> None:
        """authenticates a client with a vault token"""

        if len[token] != 26:
            raise RuntimeError['The Vault token is invalid']
        self.__client.token = token
1 trong lớp proxy 
import os

import hvac


class Vault[]:
    """class for interfacing python with vault"""

    # constructor
    def __init__[self,
                 address: str = os.environ['VAULT_ADDR']] -> None:
        """instantiates and returns a vault client"""
        self.__client = hvac.Client[url=address]

    def token_auth[self,
                   token: str = os.environ['VAULT_TOKEN']] -> None:
        """authenticates a client with a vault token"""

        if len[token] != 26:
            raise RuntimeError['The Vault token is invalid']
        self.__client.token = token
2 để dễ dàng xác thực bằng phương thức 
import setuptools

setup[
  ...
  install_requires=['hvac']
  ...
]
7

Bất kỳ ai chăm chỉ đọc các bài báo cho đến thời điểm này sẽ nhận thấy sự khác biệt lớn giữa các ràng buộc Python cho xác thực này so với các ràng buộc Go và Ruby. Các ràng buộc Python cho AppRole sẽ xác thực ứng dụng khách từ đầu đến cuối thông qua lớp được ủy quyền trong một lệnh gọi phương thức duy nhất. Thay vào đó, phương thức của liên kết Go và Ruby trả về mã thông báo có thể là đầu vào để xác thực ứng dụng khách. Ưu điểm của một phương pháp duy nhất bao gồm mã hiệu quả hơn và bảo mật được cải thiện với mã thông báo bị che khuất mà không cần truyền tới người thứ ba trong mô hình “kéo”. Nhược điểm bao gồm việc giảm tính bảo mật bằng cách che khuất thông qua nhân vật bổ sung trong quy trình mô hình “kéo”. Bạn sẽ cần cân nhắc sự đánh đổi cho môi trường của mình sao cho phù hợp

def approle_auth[self,
                 role_id: str,
                 secret_id: str] -> None:
    """authenticates a client with approle push auth"""
    self.__client.auth.approle.login[
        role_id=role_id,
        secret_id=secret_id
    ]

Truy xuất bí mật [Công cụ KV2]

Giờ đây, chúng tôi đã có một ứng dụng khách được kết nối, xác thực và được ủy quyền, chúng tôi có thể bắt đầu giao tiếp với công cụ bí mật KV2 và truy xuất bí mật. Tương tự như các phương pháp trên, các liên kết Python dành cho Vault có một phương pháp rất hợp lý để đọc các bí mật KV2. Đó là một dòng mã, điều này thậm chí còn không đúng với các phương thức ràng buộc rất tiện lợi của Ruby

Chúng tôi bắt đầu bằng cách chuyển đường dẫn bí mật đến phương thức. Lưu ý rằng theo mặc định, các liên kết giả định rằng điểm gắn kết là

import os

import hvac


class Vault[]:
    """class for interfacing python with vault"""

    # constructor
    def __init__[self,
                 address: str = os.environ['VAULT_ADDR']] -> None:
        """instantiates and returns a vault client"""
        self.__client = hvac.Client[url=address]

    def token_auth[self,
                   token: str = os.environ['VAULT_TOKEN']] -> None:
        """authenticates a client with a vault token"""

        if len[token] != 26:
            raise RuntimeError['The Vault token is invalid']
        self.__client.token = token
4. Mã lấy bí mật tại đường dẫn đã chỉ định và trả về nó dưới dạng từ điển. Mã xác minh bí mật đã truy xuất bằng kiểm tra “độ giả mạo”. Sau đó, mã trả về các cặp giá trị khóa cho bí mật dưới dạng từ điển. Tương tự như các liên kết Go và Ruby, hãy lưu ý rằng khóa
import os

import hvac


class Vault[]:
    """class for interfacing python with vault"""

    # constructor
    def __init__[self,
                 address: str = os.environ['VAULT_ADDR']] -> None:
        """instantiates and returns a vault client"""
        self.__client = hvac.Client[url=address]

    def token_auth[self,
                   token: str = os.environ['VAULT_TOKEN']] -> None:
        """authenticates a client with a vault token"""

        if len[token] != 26:
            raise RuntimeError['The Vault token is invalid']
        self.__client.token = token
5 đầu tiên trong từ điển là trình truy cập liên kết [được chuyển đổi kiểu ngầm định theo phương thức] cho các giá trị bí mật thực tế trong giá trị được trả về cho
import os

import hvac


class Vault[]:
    """class for interfacing python with vault"""

    # constructor
    def __init__[self,
                 address: str = os.environ['VAULT_ADDR']] -> None:
        """instantiates and returns a vault client"""
        self.__client = hvac.Client[url=address]

    def token_auth[self,
                   token: str = os.environ['VAULT_TOKEN']] -> None:
        """authenticates a client with a vault token"""

        if len[token] != 26:
            raise RuntimeError['The Vault token is invalid']
        self.__client.token = token
6 và khóa
import os

import hvac


class Vault[]:
    """class for interfacing python with vault"""

    # constructor
    def __init__[self,
                 address: str = os.environ['VAULT_ADDR']] -> None:
        """instantiates and returns a vault client"""
        self.__client = hvac.Client[url=address]

    def token_auth[self,
                   token: str = os.environ['VAULT_TOKEN']] -> None:
        """authenticates a client with a vault token"""

        if len[token] != 26:
            raise RuntimeError['The Vault token is invalid']
        self.__client.token = token
5 thứ hai là trên cùng . Sự trùng hợp ngẫu nhiên này có thể gây nhầm lẫn cho những người mới phát triển tích hợp Vault tùy chỉnh

import setuptools

setup[
  ...
  install_requires=['hvac']
  ...
]
2

Nếu công cụ bí mật KV2 của bạn không được gắn ở đường dẫn mặc định, thì bạn cần định cấu hình như vậy trước khi truy xuất bí mật

import setuptools

setup[
  ...
  install_requires=['hvac']
  ...
]
3

Vault Auto-Unsealing

Các máy chủ cụm Vault yêu cầu hủy niêm phong trong quá trình khởi tạo, nhưng chúng cũng thường yêu cầu hủy niêm phong trong quá trình nâng cấp không thay đổi, tự phục hồi và các quy trình thay thế máy chủ khác. Ngoài việc tham gia lại cụm thông qua giao thức tin đồn Raft, các liên kết Python là một lựa chọn phổ biến cho quy trình tự động hủy niêm phong

Các khóa chưa niêm phong được chuyển làm đầu vào cho phương thức. Máy chủ [có lẽ không phải là máy chủ trong cụm] được xác minh là đã được niêm phong. Sau đó, các khóa hủy niêm phong được sử dụng để tự động hủy niêm phong máy chủ trong cụm bằng lời gọi phương thức liên kết được sắp xếp hợp lý

import setuptools

setup[
  ...
  install_requires=['hvac']
  ...
]
4

Phần kết luận

Bây giờ chúng tôi có tích hợp Vault tùy chỉnh cho ứng dụng của bạn được phát triển bằng Python. Mã này có thể được sử dụng dưới dạng một gói trong ứng dụng của bạn hoặc phần mềm khác để mã này có thể kết nối, xác thực, ủy quyền và truy xuất bí mật một cách độc lập với cụm Vault hiện có trong một quy trình khép kín. Ứng dụng hiện có khả năng giao tiếp trực tiếp với Vault và không yêu cầu giải pháp thay thế bằng công cụ bổ sung. Sau khi cảm thấy thoải mái khi triển khai chức năng trong bài viết này, bạn có thể mở rộng để hỗ trợ các cấu hình máy khách bổ sung cũng như các công cụ xác thực và bảo mật khác

Nếu tổ chức của bạn quan tâm đến tích hợp Vault tùy chỉnh cho các ứng dụng của bạn hoặc phần mềm khác mà bạn phát triển hoặc sử dụng theo cách khác, hãy liên hệ với Shadow-Soft bên dưới

Kho tiền được sử dụng để làm gì?

Vault cung cấp dịch vụ mã hóa với tính năng quản lý khóa tập trung để đơn giản hóa việc mã hóa dữ liệu khi truyền và lưu trữ trên các đám mây cũng như trung tâm dữ liệu . Vault có thể mã hóa/giải mã dữ liệu được lưu trữ ở nơi khác, về cơ bản cho phép các ứng dụng mã hóa dữ liệu của họ trong khi lưu trữ dữ liệu đó trong kho lưu trữ dữ liệu chính.

Vault có miễn phí sử dụng không?

HashiCorp Vault có giá bao nhiêu? . Nền tảng doanh nghiệp bao gồm khắc phục thảm họa, không gian tên và giám sát, cũng như các tính năng dành cho quy mô và quản trị. HashiCorp Vault is a free and open source product with an enterprise offering. The enterprise platform includes disaster recovery, namespaces, and monitoring, as well as features for scale and governance.

Máy chủ Vault hoạt động như thế nào?

Máy khách Vault kiểm tra một tệp. Máy khách Vault gửi yêu cầu tệp đến máy chủ Vault. Máy chủ Vault gửi truy vấn đến cơ sở dữ liệu. Máy chủ Vault sao chép các tệp từ kho lưu trữ tệp sang máy khách

Khi nào tôi nên sử dụng tác nhân Vault?

Trường hợp sử dụng phổ biến cho việc triển khai Vault Agent là sử dụng trình tiêm sidecar tác nhân trong môi trường Kubernetes để quản lý xác thực và bí mật cho các nhóm ứng dụng .

Chủ Đề