ソリューション:安全なAPMサーバーアクセス

APMアーキテクチャ図では、次のことがわかります。

 

APMエージェントがセキュリティ設定なしでAPMサーバーにアクセスする場合、どのアプリケーションもデータをAPMサーバーに転送できます。悪意のあるソフトウェアである場合、取得するデータは間違っています。では、安全な送信を保証する方法は?

答えは、送信中にシークレットトークンを使用することです。

 

シークレットトークンとは何ですか?
APMサーバーへのリクエストを承認するためのシークレットトークンを設定できます。これにより、エージェントのみがAPMサーバーにデータを送信できるようになります。プロキシとAPMサーバーの両方が同じシークレットトークで構成されている必要があり、シークレットトークンは、SSL / TLSと組み合わせて使用​​した場合にのみセキュリティを提供します。

シークレットトークンを使用してAPMエージェントとAPMサーバー間の通信セキュリティを保護するには:

APMサーバSSL / TLSの有効
トークンとサーバエージェントシークレットの設定を
有効にするHTTPS APMのエージェント
 
実際
次に、我々は達成する方法を示して動作するには、上記の手順に従ってください。

Elasticsearch、Kibana、およびAPMサーバーによると、Elasticsearch、Kibana、およびAPMサーバーを
インストールしていない場合は、以前の記事「ソリューション:アプリケーションパフォーマンスの監視/管理(APM)の実践」を参照してインストールできます。


上記の要件インストールするための証明書を生成するには、SSL / TLSを有効にする必要があります。自分の証明書が必要です。Elasticsearchインストールのルートディレクトリに次のコマンドを入力します。

./bin/elasticsearch-certutil ca --pem
$ pwd
/Users/liuxg/elastic3/elasticsearch-7.6.2

$ ./bin/elasticsearch-certutil ca --pem
このツールは、X.509証明書の生成を支援し、
ElasticスタックのSSL / TLSで使用するための証明書署名リクエスト。

「ca」モードは新しい「認証局」
を生成しますこれは
、「cert」モードで実行するときに証明書に署名するために使用できる新しいX.509証明書と秘密鍵を作成します。認証局

の「識別名」を構成する場合は、「ca-dn」オプションを使用します。デフォルトでは、「ca」モードでは、以下を保持する単一のPKCS#12出力ファイルが生成されます。* CA証明書* CA






生成PEM IF形式の証明書へのあなた次期(PEMでオプション)、ウィルによってで[出力
キーのための個々のファイルを含むザ・CA証明書とプライベートBE AはZIPファイルで

[elastic-stack-ca.zip所望の入力出力ファイルにしてください:
上上記のように、上記のコマンドはelastic-stack-ca.zipというファイルを生成します。次に、次のコマンドを使用して上記のファイルを解凍します。

unzip elastic-stack-ca.zip
$ pwd
/Users/liuxg/elastic3/elasticsearch-7.6.2
liuxg:elasticsearch -7.6.2 liuxg $ unzip elastic-stack-ca.zip
Archive:elastic-stack-ca.zip
作成: ca /
inflating:ca / ca.crt inflating
:ca / ca.key
上記のように、現在のディレクトリの下に新しいディレクトリcaが生成され、ca.crtとca.keyの2つのファイルが含まれていることがわかります。ここでca.crt証明書がエージェントで使用されることに注意してください。次に、次のコマンドに従って証明書を生成します。

./bin/elasticsearch-certutil cert --ca-cert ./ca/ca.crt --ca-key ./ca/ca.key --pem --name localhost
$ pwd
/ Users / liuxg / elastic3 / elasticsearch- 7.6.2

$ ./bin/elasticsearch-certutil cert --ca-cert ./ca/ca.crt --ca-key ./ca/ca.key --pem --name localhost
このツールは生成を支援します
スタックのSSL / TLSで使用するためのX.509証明書と証明書署名リクエストのセット。

「cert」モードでは、X.509証明書と秘密鍵が生成されます。
*デフォルトで
は、単一のインスタンスで使用するための単一の証明書とキーが生成されます。
*「-multiple」オプションでは、複数の
インスタンスの詳細を入力するように求められ、インスタンスごとに証明書とキーが生成されます
*「-in」オプションを使用すると、
YAMLファイルに各インスタンスの詳細を記述することにより、証明書の生成を自動化できます。

*インスタンスは、SSL証明書を必要とするElastic Stackの一部です。
構成によっては、Elasticsearch、Logstash、Kibana、Beatsの
すべてに証明書と秘密鍵が必要になる場合があります。
*各インスタンスに最低限必要な値は名前です。これは単に
ホスト名にすることができ、証明書の共通名として使用されます。完全な
識別名も使用できます。
*インスタンスごとにファイル名の値が必要になる場合があります。これは、
名前が無効なファイルまたはディレクトリ名になる場合に必要です。ここに提供される名前
ディレクトリ名(zip内)およびキーと
証明書ファイルのプレフィックスとして使用されます。
プロンプトが表示され、名前がプロンプトに表示されない場合は、ファイル名が必要です
* IPアドレスとDNS名はオプションです。複数の値を
カンマ区切りの文字列として指定できます。IPアドレスまたはDNS名が指定されていない場合
は、SSL構成でホスト名検証を無効にすることができます。

*このツールによって生成されたすべての証明書は、認証局(CA)によって署名されます。
*ツールは新しいCAを自動的に生成するか、または独自の
-caまたは-ca-certコマンドラインオプションを提供できます。

デフォルトでは、「cert」モードは以下を保持する単一のPKCS#12出力ファイルを生成します。
*インスタンス証明書
* インスタンス証明書の秘密鍵
* CA証明書

次のオプションのいずれかを指定した場合:
* -pem(PEM形式の出力)
* -keep-ca-key(生成されたCAキーを保持)
* -multiple(複数の証明書を生成)
* -in(入力ファイルから証明書を生成)の
場合、出力は個々の証明書/キーファイルを含むzipファイル

になります。目的の出力ファイルを入力してください[certificate-bundle.zip]:

/ Users /に書き込まれた証明書liuxg / elastic3 / elasticsearch-7.6.2 / certificate-bundle.zip

このファイルには
、インスタンスの秘密鍵が含まれているため、適切に保護する必要があります。

ファイルの解凍後、各インスタンスごとにAディレクトリが存在することになるで。
各インスタンスは、Aの証明書と秘密鍵を持っている。
各弾性製品のあなたは、幅=は、あなたがコピーする必要があり、設定したいtdのことを
関連する設定ディレクトリでの[証明書、キー、およびCA証明書で
と次に、製品ガイドのSSL構成手順に従います。

クライアントアプリケーションの場合、CA証明書をコピーして、
この証明書を信頼するようにクライアントを構成するだけでよい場合があります。
上記のコマンドでは、localhostにバインドされた証明書を生成します。つまり、この証明書は現在のローカルホストでのみ使用できます。上記のように、現在のディレクトリにcertificate-bundle.zipというファイルが作成されます。このファイルには、必要な証明書情報が含まれています。次のコマンドを使用して、このファイルを解凍します。

unzip certificate-bundle.zip
$ pwd
/Users/liuxg/elastic3/elasticsearch-7.6.2
liuxg:elasticsearch -7.6.2 liuxg $ unzip certificate-bundle.zip
Archive:certificate-bundle.zip
作成:localhost / inflating
:localhost / localhost.crt
inflating:localhost / localhost.key
上記から、localhostに必要な証明書ファイルlocalhost.crtおよびlocalhoset.keyが生成されることがわかります。これら2つのファイルをAPMサーバーインストールのルートディレクトリにコピーしました。APMサーバーのインストールディレクトリで、次のことがわかります。

$ pwd
/Users/liuxg/elastic3/apm-server-7.6.2-darwin-x86_64
liuxg:apm-server-7.6.2-darwin-x86_64 liuxg $ ls
LICENSE.txt apm-server data key.pem localhost.key
通知.txt apm-server.yml fields.yml kibana
README.md certificate.pem ingest localhost.crt
注:次のコマンドを使用して、.crt証明書を.pem証明書に変換できます。

openssl x509 -in mycert.crt -out mycert.pem -outform PEM
 

APMサーバーの
構成この手順では、APMサーバーのSSL / TLSを構成する必要があります。エディタを使用して、apm-server.ymlファイルを開き、次の設定をファイルの最後に追加します。

apm-server.ssl.enabled:true
apm-server.secret_token: "123456"
apm-server.ssl.key: "localhost.key"
apm-server.ssl.certificate: "localhost.crt"
を開いて、トークンを123456に設定し、証明書も追加しました。

上記の設定を渡したら、APMサーバーを再起動します。

./apm-server -e
正しく構成すると、次の画面が表示されます。

 

証明書が正しくない場合、この出力には、証明書が正しくないことを示す多くの情報が表示されます。

 

APMエージェント
のテスト今日のテストでは、前の例「ソリューション:NodejsマイクロサービスにAPM機能を提供する」を使用します。次の方法でテストアプリケーションをダウンロードします。

git clone https://github.com/liu-xiao-guo/apm-zipcode-microserviceserver.js
ファイルのこの部分を次のように変更します。

//これをアプリに読み込まれた最初のファイルの一番上に追加します
var apm = require( 'elastic-apm-node')。start({
//サービス名をpackage.jsonからオーバーライドします
//許可されている文字:az、AZ 、0-9、-、_、およびスペース
serviceName: 'zipcode service'、

// APMサーバーにトークンが必要な場合に使用
secretToken: '1234561'、

//カスタムAPMサーバーのURLを設定(デフォルト:http:// localhost:8200 )
serverUrl: 'http:// localhost:8200'

verifyServerCert:true、
serverCaCertFile: "localhost.crt"
})
上記のように、私たちが同時に追加したように追加されます:

verifyServerCert:true、
serverCaCertFile: "localhost.crt"
上記のように、以前に生成されたca.crt証明書をアプリケーションのルートディレクトリにコピーする必要があります。

$ pwd
/ Users / liuxg / nodejs / apm / zipcode-
microservice -node liuxg:zipcode-microservice-node liuxg $ ls
LICENSE ca.crt package.json
README.md node_modules server.js
api package-lock.json service
などその後、nodejsアプリケーションを再起動します。

npm start
証明書の構成が正しければ、次の画面が表示されます。

 

証明書の設定が正しくない場合、接続エラーなどの情報が表示されます。

ブラウザに次のアドレスを入力します。

http:// localhost:3000 / distance / 84010/97229 Kibana
のAPMアプリケーションで確認できます。

 

上記から、マイクロサービスの呼び出しを確認できます。

シークレットトークンが機能したかどうかを確認するには、一致しないシークレットトークン(1234561111など)を使用できます。

//これをアプリに読み込まれた最初のファイルの非常に先頭に追加します
var apm = require( 'elastic-apm-node')Start({
//サービス名をpackage.jsonからオーバーライドします
//許可されている文字:az、AZ 、0-9、-、_、およびスペース
serviceName: 'zipcode service'、

// APMサーバーにトークンが必要な場合に使用
secretToken: '1234561111'、

//カスタムAPMサーバーのURLを設定(デフォルト:http:// localhost:8200 )
serverUrl: 'https:// localhost:8200'、

verifyServerCert:true、
serverCaCertFile: "/Users/liuxg/nodejs/apm/zipcode-microservice-node/ca.crt"
})
次に、nodejsアプリケーションを再起動してから、次の画面が表示されます。

 

上記は、シークレットトークンが機能することを示しています。
————————————————
著作権声明:この記事は、CSDNブロガー「Elastic China Community Official Blog」の元の記事であり、CC 4.0 BY-SAの著作権契約に従います。転載用の元のソースを添付してくださいリンクとこのステートメント。
元のリンク:https://elasticstack.blog.csdn.net/article/details/105527468

おすすめ

転載: www.cnblogs.com/dfs23/p/12709858.html