Skip to content

Commit d857bdd

Browse files
kyessenovJoshua Blatt
authored andcommitted
implement upstream secure bit (#2133)
Signed-off-by: Kuat Yessenov <kuat@google.com>
1 parent 0b0d2c5 commit d857bdd

14 files changed

Lines changed: 72 additions & 0 deletions

File tree

include/istio/control/http/report_data.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ class ReportData {
4949
// Get destination ip/port.
5050
virtual bool GetDestinationIpPort(std::string *ip, int *port) const = 0;
5151

52+
// Indicates whether the upstream connection is secure.
53+
virtual bool IsUpstreamSecure() const = 0;
54+
5255
// Get Rbac attributes.
5356
struct RbacReportInfo {
5457
std::string permissive_resp_code;

include/istio/control/tcp/report_data.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ class ReportData {
4545
// Get upstream host UID. This value overrides the value in the report bag.
4646
virtual bool GetDestinationUID(std::string *uid) const = 0;
4747

48+
// Indicates whether the upstream connection is secure.
49+
virtual bool IsUpstreamSecure() const = 0;
50+
4851
// ConnectionEvent is used to indicates the tcp connection event in Report
4952
// call.
5053
enum ConnectionEvent {

include/istio/utils/attribute_names.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ struct AttributeName {
7878
static const char kConnectionDuration[];
7979
static const char kConnectionMtls[];
8080
static const char kConnectionRequestedServerName[];
81+
static const char kConnectionUpstreamSecure[];
8182
static const char kConnectionId[];
8283
// Record TCP connection status: open, continue, close
8384
static const char kConnectionEvent[];

src/envoy/http/mixer/report_data.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,16 @@ class ReportData : public ::istio::control::http::ReportData,
115115
return false;
116116
}
117117

118+
bool IsUpstreamSecure() const override {
119+
if (info_.upstreamHost()) {
120+
return info_.upstreamHost()
121+
->cluster()
122+
.transportSocketFactory()
123+
.implementsSecureTransport();
124+
}
125+
return false;
126+
}
127+
118128
bool GetGrpcStatus(GrpcStatus *status) const override {
119129
// Check trailer first.
120130
// If not response body, grpc-status is in response headers.

src/envoy/tcp/mixer/filter.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,16 @@ bool Filter::GetDestinationUID(std::string *uid) const {
219219
return false;
220220
}
221221

222+
bool Filter::IsUpstreamSecure() const {
223+
if (filter_callbacks_->upstreamHost()) {
224+
return filter_callbacks_->upstreamHost()
225+
->cluster()
226+
.transportSocketFactory()
227+
.implementsSecureTransport();
228+
}
229+
return false;
230+
}
231+
222232
const ::google::protobuf::Map<std::string, ::google::protobuf::Struct>
223233
&Filter::GetDynamicFilterState() const {
224234
return cached_filter_metadata_;

src/envoy/tcp/mixer/filter.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class Filter : public Network::Filter,
6060
// ReportData virtual functions.
6161
bool GetDestinationIpPort(std::string *str_ip, int *port) const override;
6262
bool GetDestinationUID(std::string *uid) const override;
63+
bool IsUpstreamSecure() const override;
6364
const ::google::protobuf::Map<std::string, ::google::protobuf::Struct>
6465
&GetDynamicFilterState() const override;
6566
void GetReportInfo(

src/envoy/utils/utils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
#include "envoy/http/header_map.h"
2222
#include "envoy/network/connection.h"
23+
#include "envoy/upstream/upstream.h"
2324
#include "google/protobuf/util/json_util.h"
2425
#include "include/istio/mixerclient/check_response.h"
2526

src/istio/control/http/attributes_builder.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,10 @@ void AttributesBuilder::ExtractReportAttributes(
222222
builder.AddString(utils::AttributeName::kDestinationUID, uid);
223223
}
224224

225+
if (report_data->IsUpstreamSecure()) {
226+
builder.AddBool(utils::AttributeName::kConnectionUpstreamSecure, true);
227+
}
228+
225229
std::map<std::string, std::string> headers =
226230
report_data->GetResponseHeaders();
227231
builder.AddStringMap(utils::AttributeName::kResponseHeaders, headers);

src/istio/control/http/attributes_builder_test.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -758,6 +758,7 @@ TEST(AttributesBuilderTest, TestReportAttributes) {
758758
*uid = "pod1.ns2";
759759
return true;
760760
}));
761+
EXPECT_CALL(mock_data, IsUpstreamSecure()).WillOnce(testing::Return(true));
761762
EXPECT_CALL(mock_data, GetResponseHeaders())
762763
.WillOnce(Invoke([]() -> std::map<std::string, std::string> {
763764
std::map<std::string, std::string> map;
@@ -803,6 +804,9 @@ TEST(AttributesBuilderTest, TestReportAttributes) {
803804
(*expected_attributes
804805
.mutable_attributes())[utils::AttributeName::kDestinationUID]
805806
.set_string_value("pod1.ns2");
807+
(*expected_attributes
808+
.mutable_attributes())[utils::AttributeName::kConnectionUpstreamSecure]
809+
.set_bool_value(true);
806810
(*expected_attributes
807811
.mutable_attributes())[utils::AttributeName::kResponseGrpcStatus]
808812
.set_string_value("grpc-status");
@@ -838,6 +842,7 @@ TEST(AttributesBuilderTest, TestReportAttributesWithDestIP) {
838842
return true;
839843
}));
840844
EXPECT_CALL(mock_data, GetDestinationUID(_)).WillOnce(testing::Return(false));
845+
EXPECT_CALL(mock_data, IsUpstreamSecure()).WillOnce(testing::Return(false));
841846
EXPECT_CALL(mock_data, GetResponseHeaders())
842847
.WillOnce(Invoke([]() -> std::map<std::string, std::string> {
843848
std::map<std::string, std::string> map;

src/istio/control/http/mock_report_data.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class MockReportData : public ReportData {
3030
MOCK_CONST_METHOD1(GetReportInfo, void(ReportInfo *info));
3131
MOCK_CONST_METHOD2(GetDestinationIpPort, bool(std::string *ip, int *port));
3232
MOCK_CONST_METHOD1(GetDestinationUID, bool(std::string *ip));
33+
MOCK_CONST_METHOD0(IsUpstreamSecure, bool());
3334
MOCK_CONST_METHOD1(GetGrpcStatus, bool(GrpcStatus *status));
3435
MOCK_CONST_METHOD1(GetRbacReportInfo, bool(RbacReportInfo *info));
3536
MOCK_CONST_METHOD0(

0 commit comments

Comments
 (0)