rbac_policy.h
Go to the documentation of this file.
1 // Copyright 2021 gRPC authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef GRPC_CORE_LIB_SECURITY_AUTHORIZATION_RBAC_POLICY_H
16 #define GRPC_CORE_LIB_SECURITY_AUTHORIZATION_RBAC_POLICY_H
17 
19 
20 #include <stdint.h>
21 
22 #include <map>
23 #include <memory>
24 #include <string>
25 #include <vector>
26 
27 #include "absl/types/optional.h"
28 
30 
31 namespace grpc_core {
32 
33 // Represents Envoy RBAC Proto. [See
34 // https://github.com/envoyproxy/envoy/blob/release/v1.17/api/envoy/config/rbac/v3/rbac.proto]
35 struct Rbac {
36  enum class Action {
37  kAllow,
38  kDeny,
39  };
40 
41  struct CidrRange {
42  CidrRange() = default;
44 
45  CidrRange(CidrRange&& other) noexcept;
46  CidrRange& operator=(CidrRange&& other) noexcept;
47 
48  std::string ToString() const;
49 
52  };
53 
54  // TODO(ashithasantosh): Support for destination_port_range.
55  struct Permission {
56  enum class RuleType {
57  kAnd,
58  kOr,
59  kNot,
60  kAny,
61  kHeader,
62  kPath,
63  kDestIp,
64  kDestPort,
65  kMetadata,
67  };
68 
70  std::vector<std::unique_ptr<Permission>> permissions);
72  std::vector<std::unique_ptr<Permission>> permissions);
73  static Permission MakeNotPermission(Permission permission);
79  // All the other fields in MetadataMatcher are ignored except invert.
82 
83  Permission() = default;
84 
85  Permission(Permission&& other) noexcept;
86  Permission& operator=(Permission&& other) noexcept;
87 
88  std::string ToString() const;
89 
94  int port;
95  // For type kAnd/kOr/kNot. For kNot type, the vector will have only one
96  // element.
97  std::vector<std::unique_ptr<Permission>> permissions;
98  // For kMetadata
99  bool invert = false;
100  };
101 
102  struct Principal {
103  enum class RuleType {
104  kAnd,
105  kOr,
106  kNot,
107  kAny,
109  kSourceIp,
111  kRemoteIp,
112  kHeader,
113  kPath,
114  kMetadata,
115  };
116 
118  std::vector<std::unique_ptr<Principal>> principals);
119  static Principal MakeOrPrincipal(
120  std::vector<std::unique_ptr<Principal>> principals);
121  static Principal MakeNotPrincipal(Principal principal);
122  static Principal MakeAnyPrincipal();
130  // All the other fields in MetadataMatcher are ignored except invert.
132 
133  Principal() = default;
134 
135  Principal(Principal&& other) noexcept;
136  Principal& operator=(Principal&& other) noexcept;
137 
138  std::string ToString() const;
139 
144  // For type kAnd/kOr/kNot. For kNot type, the vector will have only one
145  // element.
146  std::vector<std::unique_ptr<Principal>> principals;
147  // For kMetadata
148  bool invert = false;
149  };
150 
151  struct Policy {
152  Policy() = default;
154 
155  Policy(Policy&& other) noexcept;
156  Policy& operator=(Policy&& other) noexcept;
157 
158  std::string ToString() const;
159 
162  };
163 
164  Rbac() = default;
165  Rbac(Rbac::Action action, std::map<std::string, Policy> policies);
166 
167  Rbac(Rbac&& other) noexcept;
168  Rbac& operator=(Rbac&& other) noexcept;
169 
170  std::string ToString() const;
171 
173  std::map<std::string, Policy> policies;
174 };
175 
176 } // namespace grpc_core
177 
178 #endif /* GRPC_CORE_LIB_SECURITY_AUTHORIZATION_RBAC_POLICY_H */
grpc_core::Rbac::operator=
Rbac & operator=(Rbac &&other) noexcept
Definition: rbac_policy.cc:39
grpc_core::Rbac::Principal::MakeHeaderPrincipal
static Principal MakeHeaderPrincipal(HeaderMatcher header_matcher)
Definition: rbac_policy.cc:314
grpc_core::Rbac::Permission::MakePathPermission
static Permission MakePathPermission(StringMatcher string_matcher)
Definition: rbac_policy.cc:121
grpc_core::Rbac::Permission::MakeHeaderPermission
static Permission MakeHeaderPermission(HeaderMatcher header_matcher)
Definition: rbac_policy.cc:113
grpc_core::Rbac::Principal::invert
bool invert
Definition: rbac_policy.h:148
grpc_core::Rbac::Permission::MakeAnyPermission
static Permission MakeAnyPermission()
Definition: rbac_policy.cc:107
grpc_core::Rbac::Permission::MakeAndPermission
static Permission MakeAndPermission(std::vector< std::unique_ptr< Permission >> permissions)
Definition: rbac_policy.cc:83
grpc_core::Rbac::Principal::MakeAnyPrincipal
static Principal MakeAnyPrincipal()
Definition: rbac_policy.cc:279
grpc_core::Rbac::Policy::permissions
Permission permissions
Definition: rbac_policy.h:160
grpc_core
Definition: call_metric_recorder.h:31
grpc_core::Rbac::Principal::RuleType::kPrincipalName
@ kPrincipalName
grpc_core::Rbac::Permission::permissions
std::vector< std::unique_ptr< Permission > > permissions
Definition: rbac_policy.h:97
grpc_core::Rbac::Action::kDeny
@ kDeny
grpc_core::Rbac::Permission::RuleType::kNot
@ kNot
grpc_core::Rbac::Principal::RuleType::kSourceIp
@ kSourceIp
grpc_core::Rbac::ToString
std::string ToString() const
Definition: rbac_policy.cc:45
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
grpc_core::Rbac::Permission::RuleType::kPath
@ kPath
grpc_core::Rbac::Permission::RuleType::kDestIp
@ kDestIp
grpc_core::Rbac::Permission::MakeNotPermission
static Permission MakeNotPermission(Permission permission)
Definition: rbac_policy.cc:99
grpc_core::Rbac::Permission::RuleType::kMetadata
@ kMetadata
grpc_core::Rbac::Principal::operator=
Principal & operator=(Principal &&other) noexcept
Definition: rbac_policy.cc:359
grpc_core::Rbac::Principal::RuleType::kRemoteIp
@ kRemoteIp
grpc_core::Rbac::CidrRange::CidrRange
CidrRange()=default
grpc_core::Rbac::Permission::header_matcher
HeaderMatcher header_matcher
Definition: rbac_policy.h:91
grpc_core::Rbac::Policy
Definition: rbac_policy.h:151
grpc_core::HeaderMatcher
Definition: matchers/matchers.h:79
grpc_core::Rbac::Principal::RuleType::kAny
@ kAny
grpc_core::Rbac::Principal::MakePathPrincipal
static Principal MakePathPrincipal(StringMatcher string_matcher)
Definition: rbac_policy.cc:322
grpc_core::Rbac::Principal::RuleType::kHeader
@ kHeader
grpc_core::Rbac::Principal::RuleType::kOr
@ kOr
grpc_core::Rbac::Principal::MakeNotPrincipal
static Principal MakeNotPrincipal(Principal principal)
Definition: rbac_policy.cc:271
grpc_core::Rbac::Permission::RuleType::kHeader
@ kHeader
uint32_t
unsigned int uint32_t
Definition: stdint-msvc2008.h:80
grpc_core::Rbac::Principal::RuleType::kAnd
@ kAnd
grpc_core::Rbac::Action
Action
Definition: rbac_policy.h:36
grpc_core::Rbac::Principal::MakeAndPrincipal
static Principal MakeAndPrincipal(std::vector< std::unique_ptr< Principal >> principals)
Definition: rbac_policy.cc:255
grpc_core::Rbac::Permission::RuleType::kAny
@ kAny
grpc_core::Rbac::action
Action action
Definition: rbac_policy.h:172
grpc_core::Rbac::Principal::ToString
std::string ToString() const
Definition: rbac_policy.cc:383
grpc_core::Rbac::Permission::ToString
std::string ToString() const
Definition: rbac_policy.cc:211
grpc_core::Rbac::Principal::string_matcher
absl::optional< StringMatcher > string_matcher
Definition: rbac_policy.h:142
grpc_core::Rbac::Policy::operator=
Policy & operator=(Policy &&other) noexcept
Definition: rbac_policy.cc:435
grpc_core::Rbac::Principal::RuleType
RuleType
Definition: rbac_policy.h:103
matchers.h
absl::optional
Definition: abseil-cpp/absl/types/internal/optional.h:61
grpc_core::Rbac::Principal
Definition: rbac_policy.h:102
grpc_core::Rbac::Permission::RuleType::kOr
@ kOr
grpc_core::Rbac::Principal::Principal
Principal()=default
grpc_core::Rbac::Policy::principals
Principal principals
Definition: rbac_policy.h:161
grpc_core::Rbac::Permission::RuleType
RuleType
Definition: rbac_policy.h:56
grpc_core::Rbac::Permission::operator=
Permission & operator=(Permission &&other) noexcept
Definition: rbac_policy.cc:183
grpc_core::Rbac::Principal::principals
std::vector< std::unique_ptr< Principal > > principals
Definition: rbac_policy.h:146
stdint.h
grpc_core::Rbac::Permission::type
RuleType type
Definition: rbac_policy.h:90
grpc_core::Rbac::Permission::Permission
Permission()=default
grpc_core::Rbac::CidrRange::address_prefix
std::string address_prefix
Definition: rbac_policy.h:50
grpc_core::Rbac::CidrRange::prefix_len
uint32_t prefix_len
Definition: rbac_policy.h:51
grpc_core::Rbac::Permission::string_matcher
StringMatcher string_matcher
Definition: rbac_policy.h:92
grpc_core::Rbac::Principal::header_matcher
HeaderMatcher header_matcher
Definition: rbac_policy.h:141
grpc_core::StringMatcher
Definition: matchers/matchers.h:32
grpc_core::Rbac
Definition: rbac_policy.h:35
grpc_core::Rbac::Policy::ToString
std::string ToString() const
Definition: rbac_policy.cc:441
grpc_core::Rbac::Principal::RuleType::kNot
@ kNot
grpc_core::Rbac::Rbac
Rbac()=default
grpc_core::Rbac::Permission::RuleType::kReqServerName
@ kReqServerName
grpc_core::Rbac::Policy::Policy
Policy()=default
grpc_core::Rbac::Principal::MakeAuthenticatedPrincipal
static Principal MakeAuthenticatedPrincipal(absl::optional< StringMatcher > string_matcher)
Definition: rbac_policy.cc:285
grpc_core::Rbac::policies
std::map< std::string, Policy > policies
Definition: rbac_policy.h:173
grpc_core::Rbac::Permission::MakeOrPermission
static Permission MakeOrPermission(std::vector< std::unique_ptr< Permission >> permissions)
Definition: rbac_policy.cc:91
grpc_core::Rbac::Action::kAllow
@ kAllow
grpc_core::Rbac::Principal::MakeRemoteIpPrincipal
static Principal MakeRemoteIpPrincipal(CidrRange ip)
Definition: rbac_policy.cc:307
grpc_core::Rbac::CidrRange
Definition: rbac_policy.h:41
grpc_core::Rbac::Permission::MakeReqServerNamePermission
static Permission MakeReqServerNamePermission(StringMatcher string_matcher)
Definition: rbac_policy.cc:150
grpc_core::Rbac::Permission::ip
CidrRange ip
Definition: rbac_policy.h:93
grpc_core::Rbac::Permission::RuleType::kDestPort
@ kDestPort
grpc_core::Rbac::Principal::MakeSourceIpPrincipal
static Principal MakeSourceIpPrincipal(CidrRange ip)
Definition: rbac_policy.cc:293
grpc_core::Rbac::Principal::type
RuleType type
Definition: rbac_policy.h:140
grpc_core::Rbac::Principal::RuleType::kMetadata
@ kMetadata
grpc_core::Rbac::Permission::MakeDestIpPermission
static Permission MakeDestIpPermission(CidrRange ip)
Definition: rbac_policy.cc:129
grpc_core::Rbac::CidrRange::ToString
std::string ToString() const
Definition: rbac_policy.cc:74
grpc_core::Rbac::Principal::MakeMetadataPrincipal
static Principal MakeMetadataPrincipal(bool invert)
Definition: rbac_policy.cc:330
grpc_core::Rbac::Permission::port
int port
Definition: rbac_policy.h:94
grpc_core::Rbac::Permission
Definition: rbac_policy.h:55
grpc_core::Rbac::Principal::MakeDirectRemoteIpPrincipal
static Principal MakeDirectRemoteIpPrincipal(CidrRange ip)
Definition: rbac_policy.cc:300
grpc_core::Rbac::Permission::MakeDestPortPermission
static Permission MakeDestPortPermission(int port)
Definition: rbac_policy.cc:136
grpc_core::Rbac::Principal::MakeOrPrincipal
static Principal MakeOrPrincipal(std::vector< std::unique_ptr< Principal >> principals)
Definition: rbac_policy.cc:263
grpc_core::Rbac::Principal::ip
CidrRange ip
Definition: rbac_policy.h:143
grpc_core::Rbac::Permission::RuleType::kAnd
@ kAnd
grpc_core::Rbac::Permission::MakeMetadataPermission
static Permission MakeMetadataPermission(bool invert)
Definition: rbac_policy.cc:143
grpc_core::Rbac::Permission::invert
bool invert
Definition: rbac_policy.h:99
grpc_core::Rbac::Principal::RuleType::kDirectRemoteIp
@ kDirectRemoteIp
grpc_core::Rbac::Principal::RuleType::kPath
@ kPath
grpc_core::Rbac::CidrRange::operator=
CidrRange & operator=(CidrRange &&other) noexcept
Definition: rbac_policy.cc:68
port_platform.h


grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:59