Hashicorp Vault認証とスプリングクラウドとスプリングブート

8669 ワード

この記事ではHashicorp Vaultのセットアップと使用方法について説明します.Vaultサポート複数authentication methods , 本稿ではこれら2つの方法について議論する
  • トークンベース認証
  • AppRole authentication
  • Update: Starting with Spring Boot 2.4.x, spring boot changed the way config files are processed. Updated the article to reflect the same.


    技術

  • Spring Boot 2.4.X
  • 春の雲のVaultの設定
  • ジャバ11
  • Vaultのセットアップ-スタンドアロン


    1 . hashicorpvaultというディレクトリを作成し、設定ファイルをすべて保存する
    ダウンロードVaultライブラリからVault そして、PATHVaultコマンドを自動補完できるように、次のコマンドを実行します
    $ vault -autocomplete-install
    
    4 . createconfig.hcl ディレクトリ内のファイル
    storage “consul” {  
     address = “127.0.0.1:8500”  
     path = “vault/”  
     }  
    
     ui = true  
    
     listener “tcp” {  
     address = “127.0.0.1:8200”  
     tls\_disable = 1  
     }
    
    からダウンロードしますhttps://www.consul.io/downloads.html そして、PATH次のコマンドを実行します$ consul agent -dev7 .新しい端末を開き、次のコマンドを実行してVaultを起動します$ vault server -config=<path_to_file>/config.hclもう一つのターミナルを開き、以下のコマンドを実行します$ export VAULT_ADDR=http://127.0.0.1:8200次のコマンドでvaultを初期化し、キーをどこか安全にコピーします
    $ vault operator init  
     Unseal Key 1: E4GnjX+VP9G50uWQNcwpCflzGAMKGR38BbQywgq4I6L8  
     Unseal Key 2: PYMxcCOswEYMNz7N6UW53Up6nu6y+SjAPwTJOTtkju3d  
     Unseal Key 3: yuJ5cSxC7tSBR5mMVJ/WJ9bfhhfGb+uwWw9FQR0JKILh  
     Unseal Key 4: 0vdvEFHM9PHEGMctJrl2ylHqoKQK8DLkfMU6ntmDz6jv  
     Unseal Key 5: cI8yglWJX+jPf/yQG7Sg6SPWzy0WyrBPvaFTOAYkPJTx  
    
     Initial Root Token: 62421926–81b9-b202–86f8–8850176c0cf3
    
    10 .次のコマンドでVaultを開封しましょう.この3回を実行してください、各々の時間はステップ9から異なるキーを入力します$ vault operator unseal11 . goにhttp://localhost:8200/ui/ Vault UIを見るには

    秘密エンジン

  • 移動するhttp://127.0.0.1:8200/ui/vault/secrets をクリックし、'秘密のエンジンを有効にし'を選択し'一般的な' kv 'を選択

  • エンジンを有効にする
    2 .パスフィールドの次の画面で、'秘密'または' vaultdemo 'を入力します(または、任意の名前を選択します)

    3 .メイン画面へhttp://127.0.0.1:8200/ui/vault/secrets を選択し、vaultDempエンジンを選択して新しい秘密を作成します.それはフォーマットでなければなりません/.
    pres/dev  
    pres/test  
    pres/prod
    
    4 .アプリケーション名もフォーマット/
    Ex: vaultdemo/app/pres/dev
    
    5 . Create新しいバージョンをクリックし、次のパスワードを入力します

    Dev: username=root password=bcmc1234 url=”jdbc:mysql://localhost:3306/bookstore_dev”

    Test: username=sa password=”” url=”jdbc:h2:mem:bookstore_test”

    Prod: username=root password=bcmc1234 url=”jdbc:mysql://localhost:3306/bookstore_prod”


    http://localhost:8200/ui/vault/policies/acl という名前のACLポリシーを作成しますvault-demo-policy それは私たちの秘密エンジンへのアクセスを制御します(後の手順で作成されます)
    path “vaultdemo/pres/\*” {  
     capabilities = \[“read”,”create”,”update”,"list"\]  
     }  
    
    

    スプリングブートプロジェクトの設定


    プロジェクトを起動するにはapplication.yml 以下の内容によるファイル
    spring:  
      application:  
        name: pres  
      cloud:  
        vault:  
          authentication: TOKEN  
          token: ${token}  
          scheme: http  
          host: localhost  
          port: 8200  
          kv:  
            enabled: true  
            backend: vaultdemo  
       config:   
         import: vault://secret/app/pres/
    
    7 . Linuxマシン環境変数にトークンをエクスポートするには、次の構文を使用します$ export VAULT_TOKEN=<Your token>
    7 .春はブートストラップを使用します.YLLファイルは、コンテキストを初期化する前に、Springプロファイルによって必要なVault設定とキー値のペアを読み込みます.${ VaultLagトークン}値はマシン環境変数から取得されます.
    8 . include属性内のすべてのプロファイルを含めるようにしてください.これは、コンテキストを初期化する前に、それらのプロファイルをロードするように
    9 .アプリケーションを作成します.Vaultからのキーはここで一致するはずです.e ${ username }、${ password }、${ url }
    \## Server Properties  
    server:  
      port: 8081  
    
    spring:  
      config:                             
        import: vault://secret/app/pres/dev                                
        activate:                               
          on-profile: "dev"  
      datasource:  
        username: ${username}  
        password: ${password}  
        url: ${url}
    
    10 .アプリケーションの作成テストテストとprod環境のためのyml configファイル
    11 . createmaven profiles インポム.プロファイルをアクティブにするXML.参照pom.xml 参考に
    [

    パヴァンジャダ/ハシコルプヴォルト春


    このとき、そのアクションは実行できません。別のタブまたはウィンドウに署名しました。あなたは別のタブで署名したり…。


    ギタブ.コム
    (https://github.com/pavankjadda/HashiCorpVault-SpringCloud/blob/7b3ce9cd4670e3f5298d7ec45f75ff9beec7fdc0/pom.xml#L75 )
    \## Select profile  
    spring:  
      profiles:  
        active: @activatedProperties@
    

    認証の承認

  • 移動するhttp://127.0.0.1:8200/ui/vault/access をクリックして'新しいメソッドを有効にする'を選択して'承認'

  • 承認認証の有効化
    2 .プロジェクトの新しいアプリケーションロールを作成する
    $ vault write auth/approle/role/your-app-name-read \\secret\_id\_num\_uses=0 \\secret\_id\_ttl=0 \\token\_num\_uses=0 \\token\_ttl=10m \\token\_max\_ttl=10m \\policies=approle-your-app-name-read
    
    ロールIDの再試行$ vault read auth/approle/role/your-app-name-read/role-id4 .秘密のIDを取得する$ vault write -f auth/approle/role/your-app-name-read/secret-idアプリケーションロール認証を使用するには、Spring Bootプロジェクトを構成します.アプリケーションの作成.YMLファイル
    **spring**:  
      **cloud**:  
        **vault**:  
          **authentication**: _APPROLE_ **app-role**:  
            **role-id**: ${**role-id**}  
            **secret-id**: ${**secret-id**}  
            **role**: pres-read  
            **app-role-path**: approle  
          **uri**: http://localhost:8200  
          **connection-timeout**: 5000  
          **read-timeout**: 15000  
          **kv**:  
            **enabled**: **true  
            backend**: vaultdemo  
            **application-name**: pres  
      **config**:  
        **import**: vault://secret/app/pres/
    
    アプリケーションスタートアップ中にロールIDと秘密のIDを提供します

    プロジェクトの構築と実行


  • クローンthis project とMavenを使用してビルドします.必ず合格する-Ddev または、Mavenコマンドに対するパラメータをテストします.これは、スプリングプロファイルIDを選択し、アプリケーションに渡す.YMLファイル$ mvn clean package -Dtest -DskipTests

  • Javaコマンドでプロジェクトを実行します.これは前のステップからプロファイルを使用してプロジェクトを起動する必要がありますjava -jar target/vaultdemo-0.0.1.jar
  • 移動するhttp://localhost:8081/api/v1/book/list Vaultから取得した資格情報をデータベースから取得した書籍の一覧を見るには
  • コードアップロードGithub 参考のために.ハッピーコーディング