こんにちは、みなさん、私はジャックポップです!
この期間中、最も人気があり話題になっているのは、ロシア・ウクライナ戦争であるに違いありません。
少し前に、ウクライナ軍の自動制御システム(ACS)「Dnipro」がサーバーアカウントのパスワードとして「admin」と「123456」を使用しているという興味深いニュースを見ました。
軍隊の自動制御システムは、このような単純なパスワードをどのように使用できるでしょうか。
よく知られているウェブサイトの調査によると、パスワード「123456」のユーザー数はすでにリストのトップに立っています。
当然、セキュリティ意識の欠如もありますが、今日のインターネットの世界では、どのウェブサイトでも新しいアカウントパスワードを登録する必要があり、複雑なアカウントパスワードを設定すると、当然メモリに大きな負担がかかります。
では、キーデータを保存する方法は?
実際のストレージに入る前に、キーとは何か、およびキーを管理する必要がある理由について簡単に説明しましょう。
さまざまな理由から、今日のほとんどのアプリケーションはクラウドベースのアーキテクチャでホストされています。オンプレミスでもクラウドでも、キーを安全な環境に保存する必要がある場合があります。
秘密鍵とは何ですか?
キーは、以下を含むがこれらに限定されないデジタルデータです。
-
ユーザーのパスワード
-
システムパスワード
-
データベースパスワード
-
APIキー
-
sshキー
-
OTP
-
暗号化キーなど...
これらのキーの管理は、組織内の情報セキュリティ/DevOpsの責任です。データへの不正アクセスがないことを保証します。
Vaultをインストールします
Vaultとは何ですか?
Vaultは、認証および承認方法によって制御される暗号化サービスを提供するIDベースの秘密および暗号化管理システムです。
Vaultのユーザーインターフェイス、CLI、またはHTTP APIを使用して、シークレットやその他の機密データへのアクセスを安全に保存および管理し、厳密に制御(制限)し、監査することができます。
まず、ローカルシステムにVaultをインストールしましょう。
マックOS
macOSでは、brewを使用してインストールできます。
まず、HashiCorpタップをインストールします。
$brew tap hashicorp/tap
Vaultをインストールします。
$brew upgrade hashicorp/tap/vault
ウィンドウズ
Windowsでは、Chocolateyを使用して次のものをインストールできます。
$choco install vault
Ubuntu
$curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
公式のHashiCorpLinuxリポジトリを追加します。
$ sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
更新してインストールします。
$ sudo apt-get update && sudo apt-get install vault
Vaultサービスを開始します。
インストールが完了したら、次のコマンドを使用してインストールを確認します。
$ vault status
出力:
dineshkumarkb@dineshkumarkb% vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 1
Threshold 1
Version 1.9.0
Storage Type inmem
Cluster Name vault-cluster-5bfc48b1
Cluster ID 4f365a2d-2b5c-37ae-4ba3-c8b76a3e56a5
HA Enabled false
サービスを開始します。
vault server -dev
出力:
==> Vault server configuration:
Api Address: http://127.0.0.1:8200
Cgo: disabled
Cluster Address: https://127.0.0.1:8201
Go Version: go1.17.2
Listener 1: tcp (addr: "127.0.0.1:8200", cluster address: "127.0.0.1:8201", max_request_duration: "1m30s", max_request_size: "33554432", tls: "disabled")
Log Level: info
Mlock: supported: false, enabled: false
Recovery Mode: false
Storage: inmem
Version: Vault v1.9.0
==> Vault server started! Log data will stream in below:
WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory
and starts unsealed with a single unseal key. The root token is already
authenticated to the CLI, so you can immediately begin using Vault.
You may need to set the following environment variable:
$ export VAULT_ADDR='http://127.0.0.1:8200'
The unseal key and root token are displayed below in case you want to
seal/unseal the Vault or re-authenticate.
Unseal Key: WO3EV3INnT7cAPozmQB2S0DotmLg8eMa7q+CBRbrtUE=
Root Token: s.PrJcwT6kkUfG3kJdfhenoN9a
Development mode should NOT be used in production installations!
Devサーバーは組み込みの事前構成済みサーバーであり、安全性はあまり高くありませんが、Vaultをローカルで再生するのに役立ちます。
サーバーには、開封キーとルートトークンが表示されます。これらは、サーバーを起動するたびに変更されます。したがって、サーバーを再起動するたびに、必ずそのトークンを環境変数に追加してください。
Devサーバーはすべてのデータをメモリに保存し、TLSなしでローカルホストでリッスンし、自動的に開封して、開封キーとルートアクセスキーを表示します。
サーバーの詳細をPATHに追加します
$ export VAULT_ADDR='http://127.0.0.1:8200'
$ export VAULT_TOKEN="s.PrJcwT6kkUfG3kJdfhenoN9a"
Vaultを開発モードで実行している場合、Key /Valuev2シークレットエンジンはシークレット/パスで有効になります。
Key / Valueシークレットエンジンは、Vault用に構成された物理ストレージに任意のシークレットを格納するための汎用のKey-Valueストアです。
Vaultに書き込まれたシークレットは暗号化されてから、バックエンドストレージに書き込まれます。
したがって、バックエンドストレージメカニズムは暗号化されていない値を認識せず、Vaultなしで復号化する必要はありません。
アクセスボールト
Vaultは、さまざまなシークレットエンジンを使用して保存/取得できるシークレットを保存/取得するためのUI、Cli、APIなどの複数のメカニズムを提供します。
ただし、Vaultサーバーは常に開発モードでKey/Valueエンジンを使用します。
Key / Valueシークレットエンジンは、Vault用に構成された物理ストレージに任意のシークレットを格納するための汎用のKey-Valueストアです。Vaultに書き込まれたシークレットは暗号化されてから、バックエンドストレージに書き込まれます。
ユーザーインターフェイスにアクセスするには、ブラウザで開きますhttps://127.0.0.1:8200
。
開発モードのサーバーは、シークレットをに保存しsecret/
ます。
PythonでKVキーを書く
Vault開発サーバーが稼働しているので、Pythonを使用してキーを保存してみましょう。
開発サーバーはすべてのキーをメモリに保存し、サーバーセッションが終了すると、すべてのキーが削除されることに注意してください。
HVACはVaultサーバーとのやり取りに使用するVaultAPIクライアントであるため、インストールする必要があります。
HVACをインストールします
$ pip install hvac
HVACの顧客へのリンク
import hvac
def init_server():
client = hvac.Client(url='http://localhost:8200')
print(f" Is client authenticated: {client.is_authenticated()}")
init_server()
Output:
Is client authenticated: True
def write_secret():
create_response = client.secrets.kv.v2.create_or_update_secret(path='hello', secret=dict(foo="bar"))
print(create_response)
write_secret()
出力:
{
"request_id":"f2e29013-09f9-efd7-f51e-825c4a6d8f75",
"lease_id":"",
"renewable":false,
"lease_duration":0,
"data":{
"created_time":"2021-12-02T07:34:58.187639Z",
"custom_metadata":"None",
"deletion_time":"",
"destroyed":false,
"version":1
},
"wrap_info":"None",
"warnings":"None",
"auth":"None"
}
これらのキーは、UI/CLIから確認できます。作成したキーはに保存されsecrets/hello
ます。
キーを読む
def read_secret():
read_response = client.secrets.kv.v2.read_secret_version(path='hello')
print(read_response)
read_secret()
出力:
{
"request_id":"9c2fb05c-f78a-837a-a6d0-6b7a59b4d45d",
"lease_id":"",
"renewable":false,
"lease_duration":0,
"data":{
"data":{
"foo":"bar"
},
"metadata":{
"created_time":"2021-12-02T07:34:58.187639Z",
"custom_metadata":"None",
"deletion_time":"",
"destroyed":false,
"version":1
}
},
"wrap_info":"None",
"warnings":"None",
"auth":"None"
}
読み取り応答には、データオブジェクトのhelloに格納されているすべてのキーと、キーのメタデータが含まれています。
Vaultの機能はKVエンジンに限定されず、GCP、Azure、AWSの専用エンジンやAPIなどのマルチクラウドプラットフォームもサポートします。
あなたが興味を持っているなら、あなたはそれについてもっと学ぶことができます!
最後に、Java、アルゴリズム、Python、SQLなどのさまざまな分野と方向性をカバーする、アルゴリズムとプログラミングスキルを実践するための非常に優れたプラットフォームをお勧めします。質問バンクは豊富で完全に無料です。