2016-11-15 5 views
5

私は非常に簡単なスプリング・ブート・アプリケーションを持っています。それはちょうどzuulリバースプロキシです。サービスごとにユーレカとパスのマッピングを介して当社のサービスを発見するための基本的な設定以外のセキュリティや何もありません。私はアクチュエータエンドポイントが公に公開されるのを防ぎたいと思っていますが、ヘルスチェックエンドポイントを私たちのELBに使用することを望んでいますが、それが認識しているすべてのサービスの健全性について報告したくありません。敏感である)。予想される動作を得るために設定する必要があるプロパティを特定しようとしている間、私は非常に予期しない動作を経験しています。スプリング・ブート・アクチュエータのエンドポイント構成が期待どおりに機能していないようです。

たとえば、プロパティーをendpoints.sensitive=trueに設定した場合、これはヘルスチェックエンドポイントのデフォルト値を機密として変更しません。これはドキュメンテーションが言っていることに反するようです。

http://docs.spring.io/spring-boot/docs/1.4.2.RELEASE/reference/htmlsingle/#production-ready-customizing-endpoints

同様に、あなたはまた、世界的に すべてのエンドポイントの「感受性」フラグを設定することもできます。既定では、機密フラグは エンドポイントの種類によって異なります(上記の表を参照)。デバッグで実行しているとき

endpoints.sensitive =真

endpoints.info.sensitive = falseを

実際には、私は見たことがない: が情報を除き、機密として例えば、すべてのエンドポイントをマークしますorg.springframework.boot.actuate.endpoint.EndpointProperties#isSensitiveが呼び出されます。

ヘルスエンドポイントを機密扱いにするには、明示的にプロパティー​​を設定する必要があります。奇妙なことに、この設定が提供されると、org.springframework.boot.actuate.endpoint.EndpointProperties#isSensitiveが呼び出されます。

これは素晴らしいことですが、私のヘルスチェックエンドポイントは現在UPまたはDOWNだけで報告されています。しかし、今では、ヘルスチェックエンドポイントを有効にするだけのエンドポイントにしたいと思っています。だから私はendpoints.enabled=falseendpoints.health.enabled=true健康を除いてすべてのエンドポイントを無効にする必要があります設定します。しかし、これはそうではないようです。私の場合、/routes/resume/pause/hystrix.streamなどを打つことができます。私はendpoints.enabled=falseですべてのエンドポイントを無効にした後、endpoints.actuator.enabled=trueでアクチュエータエンドポイントを有効にして、アクチュエータエンドポイントにヒットし、エンドポイントが有効になったと報告したときにのみこれを判断することができました。

{ 
    "links": [ 
    { 
     "rel": "self", 
     "href": "http://localhost:9200/actuator" 
    }, 
    { 
     "rel": "resume", 
     "href": "http://localhost:9200/resume" 
    }, 
    { 
     "rel": "pause", 
     "href": "http://localhost:9200/pause" 
    }, 
    { 
     "rel": "hystrix.stream", 
     "href": "http://localhost:9200/hystrix.stream" 
    }, 
    { 
     "rel": "env", 
     "href": "http://localhost:9200/env" 
    }, 
    { 
     "rel": "routes", 
     "href": "http://localhost:9200/routes" 
    }, 
    { 
     "rel": "health", 
     "href": "http://localhost:9200/health" 
    }, 
    { 
     "rel": "refresh", 
     "href": "http://localhost:9200/refresh" 
    }, 
    { 
     "rel": "restart", 
     "href": "http://localhost:9200/restart" 
    } 
    ] 
} 

明らかに有効にした2つのエンドポイントのみが表示されます。アクセスしようとしたときに、各エンドポイントが個別になりましアクチュエータのエンドポイントからそれらを除去するが、いないよう無効に

{ 
    "links": [ 
    { 
     "rel": "self", 
     "href": "http://localhost:9200/actuator" 
    }, 
    { 
     "rel": "health", 
     "href": "http://localhost:9200/health" 
    } 
    ] 
} 

、私は改善され、「このエンドポイントが無効になっています」というメッセージが表示されます。しかし、私はroutesや `hystrix.stream *エンドポイントを無効にすることはできないようですが、この機能を公開する設定がないようです。

これはすべて、私はこれが予想される動作か、これがバグかと疑問に思いますか?

+0

は、このための2つのバグを作成しました。https://github.com/spring-projects/spring-boot/issues/7477およびhttps://github.com/spring-projects/spring-boot/issues/7476 – loesak

答えて

1

ここで説明したのと同じ問題が発生しました。 まず、あなたの春のブートバージョンを確認してください!グローバルなエンドポイントのバグがありました。NOTは、特定のスプリングブートバージョンで有効になりました。 (バージョン番号は正確ではありませんが、春の起動時にはリファクタリング回帰のようです)

ここにいくつかの参考文献があります。

私はバージョン1.3.0 RELEASEへの私の春ブーツを更新した後、設定 '真endpoints.sensitive =' を正しく私のために動作します。それもあなたのために働くことを望みます。行こう。

+0

We Spring Boot 1.4.1を使用しています – loesak

関連する問題