ホームページ >バックエンド開発 >Golang >Golang と Vault を使用して安全なエンタープライズ グレードのアプリケーションを構築する

Golang と Vault を使用して安全なエンタープライズ グレードのアプリケーションを構築する

PHPz
PHPzオリジナル
2023-07-19 20:21:121134ブラウズ

Golang と Vault を使用して安全なエンタープライズ レベルのアプリケーションを構築する

インターネットの発展に伴い、エンタープライズ レベルのアプリケーションのセキュリティがますます重要になってきています。アプリケーションを開発するときは、ユーザーのデータと資格情報を保護する方法、および外部システムと安全にやり取りする方法を考慮する必要があります。この記事では、Golang と Vault を使用して安全なエンタープライズ グレードのアプリケーションを構築する方法を説明し、実装を示すコード例を示します。

  1. Vault とは何ですか?

Vault は、パスワード、API キー、データベース認証情報などの認証情報を安全に保存および管理するために HashiCorp によって開発されたオープンソース ツールです。 Vault には、データの自動暗号化、動的な認証情報の作成とリサイクル、認証情報のバージョン管理、きめ細かいアクセス制御など、豊富な機能があります。 Vault を使用すると、機密データを安全な場所に保存し、必要なときにオンデマンドで取得できます。

  1. 認証と認可に Vault を使用する

エンタープライズ レベルのアプリケーションでは、認証と認可が非常に重要です。 Vault を使用すると、安全で柔軟な認証および認可メカニズムを実装できます。 Vault を使用した認証のサンプル コードは次のとおりです。

package main

import (
    "fmt"
    "os"

    vault "github.com/hashicorp/vault/api"
)

func main() {
    // 创建Vault客户端
    client, err := vault.NewClient(vault.DefaultConfig())
    if err != nil {
        fmt.Println("Failed to create Vault client:", err)
        os.Exit(1)
    }

    // 设置Vault地址和令牌
    client.SetAddress("http://localhost:8200")
    client.SetToken("<YOUR_VAULT_TOKEN>")

    // 进行身份验证
    _, err = client.Logical().Write("auth/userpass/login/<USERNAME>", map[string]interface{}{
        "password": "<PASSWORD>",
    })
    if err != nil {
        fmt.Println("Failed to authenticate:", err)
        os.Exit(1)
    }

    fmt.Println("Authentication successful!")
}

上記のコードは、Vault の Userpass 認証方法を使用してユーザーの資格情報を確認する方法を示しています。 client.Logical().Write() メソッドを呼び出すことで、ユーザー名とパスワードをパラメータとして渡して認証リクエストを Vault に送信できます。認証が成功すると、認証情報を含む応答を取得し、それを後続のリクエストでの認可検証に使用できます。

  1. 暗号化および復号化操作に Vault を使用する

エンタープライズ レベルのアプリケーションでは、ユーザー データの機密性を保護することが非常に重要です。 Vault を使用すると、機密データの自動暗号化と復号化を実装して、データのセキュリティを確保できます。以下は、暗号化と復号化に Vault を使用するサンプル コードです。

package main

import (
    "fmt"
    "os"

    vault "github.com/hashicorp/vault/api"
)

func main() {
    // 创建Vault客户端
    client, err := vault.NewClient(vault.DefaultConfig())
    if err != nil {
        fmt.Println("Failed to create Vault client:", err)
        os.Exit(1)
    }

    // 设置Vault地址和令牌
    client.SetAddress("http://localhost:8200")
    client.SetToken("<YOUR_VAULT_TOKEN>")

    // 加密数据
    secret, err := client.Logical().Write("transit/encrypt/my-key", map[string]interface{}{
        "plaintext": "Hello, World!",
    })
    if err != nil {
        fmt.Println("Failed to encrypt data:", err)
        os.Exit(1)
    }

    // 解密数据
    plaintext, err := client.Logical().Write("transit/decrypt/my-key", map[string]interface{}{
        "ciphertext": secret.Data["ciphertext"].(string),
    })
    if err != nil {
        fmt.Println("Failed to decrypt data:", err)
        os.Exit(1)
    }

    fmt.Println("Decrypted data:", plaintext.Data["plaintext"].(string))
}

上記のコードは、Vault の Transit 暗号化方式を使用してデータを暗号化および復号化する方法を示しています。 client.Logical().Write() メソッドを呼び出すことで、暗号化または復号化リクエストを Vault に送信し、関連するパラメータを渡すことができます。暗号化操作の場合はパラメータとして平文データを提供する必要があり、復号操作の場合は暗号文データを提供する必要があります。このようにして、アプリケーションがデータに対して安全な操作を実行できるようにしながら、機密データの機密性を保護できます。

  1. Vault を使用した動的な資格情報管理

エンタープライズ レベルのアプリケーションでは、外部システムに資格情報を提供することが一般的な要件です。 Vault を使用すると、動的認証情報を作成、リサイクル、更新して、認証情報のセキュリティと有効性を確保できます。以下は、Vault を使用して動的資格情報を管理するためのサンプル コードです。

package main

import (
    "fmt"
    "os"

    vault "github.com/hashicorp/vault/api"
)

func main() {
    // 创建Vault客户端
    client, err := vault.NewClient(vault.DefaultConfig())
    if err != nil {
        fmt.Println("Failed to create Vault client:", err)
        os.Exit(1)
    }

    // 设置Vault地址和令牌
    client.SetAddress("http://localhost:8200")
    client.SetToken("<YOUR_VAULT_TOKEN>")

    // 创建动态凭证
    secret, err := client.Logical().Write("database/creds/my-role", nil)
    if err != nil {
        fmt.Println("Failed to create dynamic credential:", err)
        os.Exit(1)
    }

    // 使用凭证连接数据库
    fmt.Println("Connecting to database with dynamic credential:", secret.Data["username"].(string), secret.Data["password"].(string))
}

上記のコードは、Vault の動的シークレット機能を使用して動的資格情報を作成する方法を示しています。 client.Logical().Write() メソッドを呼び出し、対応する認証情報のパスを指定することで、Vault に動的な認証情報を作成できます。後続の操作では、アプリケーションに必要なユーザー名とパスワードを資格情報の戻り値から取得し、それらを使用して外部システムに接続できます。

概要

この記事では、Golang と Vault を使用して安全なエンタープライズ レベルのアプリケーションを構築する方法を紹介します。 Vault を使用すると、認証と認可、暗号化と復号化、動的な資格情報管理などの機能を実装して、ユーザー データと資格情報のセキュリティを保護できます。実際には、実際のニーズやシナリオに応じて Vault の機能を柔軟に構成して使用し、エンタープライズ レベルのアプリケーションのセキュリティ要件を満たすことができます。

この記事がお役に立てば幸いです。読んでいただきありがとうございます。

以上がGolang と Vault を使用して安全なエンタープライズ グレードのアプリケーションを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。