Commit graph

2640 commits

Author SHA1 Message Date
bobby
e85226b609
grpc: use relative paths in codegen (#1106)
Signed-off-by: Bobby DeSimone <bobbydesimone@gmail.com>
2020-07-20 06:40:11 -07:00
Caleb Doxsey
fff782e04c
authorize: add evaluator store (#1105)
* add evaluator store

* handle arrays
2020-07-20 07:39:34 -06:00
Renovate Bot
d2656ecd67 chore(deps): update google.golang.org/genproto commit hash to 11fb19a 2020-07-20 08:00:29 +00:00
Cuong Manh Le
9dae633fe5
internal/frontend/assets/html: make timestamp human readable (#1107)
Since we switch to use databroker, time in template is now protobuf
timestamp instead of time.Time, that causes it appears in raw form
instead of human-readable format.

Fix this by converting protobuf timestamp to time.Time in template.
There's still a breaking change, though. The time will now appears in
UTC instead of local time.

Fixes #1100
2020-07-20 13:35:57 +07:00
Renovate Bot
0f17fb0d95 chore(deps): update module spf13/cobra to v1 2020-07-20 03:22:08 +00:00
Renovate Bot
2a99088cdf chore(deps): update module open-policy-agent/opa to v0.22.0 2020-07-20 02:27:34 +00:00
Renovate Bot
c2e487a996 chore(deps): update github.com/skratchdot/open-golang commit hash to eef8423 2020-07-20 01:06:57 +00:00
bobby
ffb6b395e2
deployment: fix pomerium-cli release (#1104)
Signed-off-by: Bobby DeSimone <bobbydesimone@gmail.com>
2020-07-17 12:45:16 -07:00
Travis Groth
ca6715d3c5
Move examples repo into main repo (#1102) 2020-07-17 14:23:06 -04:00
Caleb Doxsey
b79e73b8b8
config: add support for policies stored in the databroker (#1099)
* wip

* always use databroker config source

* add test

* valid policy, remove debug lines
2020-07-17 10:35:29 -06:00
Cuong Manh Le
821f2e9000
config: allow setting directory sync interval and timeout (#1098)
Updates #567
2020-07-17 23:11:27 +07:00
Travis Groth
25867501d4
ci: Add cloudrun build (#1097)
* add cloudrun image build
2020-07-17 12:01:30 -04:00
Cuong Manh Le
408f201d16
authorize/evaluator/opa/policy: fix allow rules with impersonate (#1094)
Currently, with impersonated request, the real user email/group still
has effects.

Example:

	data.route_policies as [{
	    "source": "example.com",
	    "allowed_users": ["x@example.com"]
	}] with
	input.databroker_data as {
	    "session": {
	        "user_id": "user1"
	    },
	    "user": {
	        "email": "x@example.com"
	    }
	} with
	input.http as { "url": "http://example.com" } with
	input.session as { "id": "session1", "impersonate_email": "y@example.com" }

Here user "x@example.com" is allowed, but was impersonated as
"y@example.com". As the rules indicated, the request must be denied,
because it only allows "x@example.com", not "y@example.com". The current
bug causes the request is still allowed.

To fix it, when evaluates rules for allowed email/group/domain, we must checking
that the impersonate email/groups is not set/empty.

Fixes #1091
2020-07-17 22:07:11 +07:00
Cuong Manh Le
59c17fb497
internal/directory: improve google user groups list (#1092)
Skip group without members, so it saves us time to handle group members,
and reduce the size of groups.

While at it, also querying API with the fields we need.

Fixes #567
2020-07-17 16:51:26 +07:00
Caleb Doxsey
02b4e4b619
fix deep copy of config (#1089) 2020-07-17 10:42:24 +07:00
Caleb Doxsey
d3a7ee38be
options refactor (#1088)
* refactor config loading

* wip

* move autocert to its own config source

* refactor options updaters

* fix stuttering

* fix autocert validate check
2020-07-16 14:30:15 -06:00
Caleb Doxsey
eef4c6f2c0
kubernetes docs (#1087)
* wip

* wip

* remove dead code

* add logging about errors for caching credentials

* rename subcommand

* add kubernetes docs
2020-07-16 12:15:41 -06:00
Caleb Doxsey
5df10d1539
pomerium-cli k8s exec-credential (#1073)
* wip

* wip

* remove dead code

* add logging about errors for caching credentials

* rename subcommand
2020-07-16 11:40:43 -06:00
Cuong Manh Le
ee1f9093ee
internal/directory: use both id and name for group (#1086)
Fixes #1085
2020-07-17 00:15:11 +07:00
Caleb Doxsey
96424dac0f
implement google cloud serverless authentication (#1080)
* add google cloud serverless support

* force ipv4 for google cloud serverless

* disable long line linting

* fix destination hostname

* add test

* add support for service accounts

* fix utc time in test
2020-07-16 08:25:14 -06:00
Travis Groth
58810cdb52
internal/directory/google: return both group e-mail and id (#1083)
* internal/directory/google: return both group e-mail and id
2020-07-16 07:19:30 -04:00
Cuong Manh Le
8e56db7830
docs/docs: add changelog for #1055 (#1084) 2020-07-16 09:57:25 +07:00
Dmitri Farkov
253addcad6
config: change certificates config key parsing to attempt Base64 decoding first. (#1055) 2020-07-15 21:15:57 +07:00
Cuong Manh Le
a5db94434d
pkg/storage: add package docs (#1078) 2020-07-15 10:30:37 +07:00
Travis Groth
8ebf06dd71
Force redirect scheme to https (#1075) 2020-07-14 23:11:22 -04:00
Cuong Manh Le
2f84dd2aff
Add storage backend interface (#1072)
* pkg: add storage package

Which contains storage.Backend interface to initial support for multiple
backend storage.

* pkg/storage: add inmemory storage

* internal/databroker: use storage.Backend interface

Instead of implementing multiple databroker server implementation for
each kind of storage backend, we use only one databroker server
implementation, which is supported multiple storage backends, which
satisfy storage.Backend interface.
2020-07-15 09:42:01 +07:00
Caleb Doxsey
a70254ab76
kubernetes apiserver integration (#1063)
* sessions: support bearer tokens in authorization

* wip

* remove dead code

* refactor signed jwt code

* use function

* update per comments

* fix test
2020-07-14 08:33:24 -06:00
Caleb Doxsey
5f6a67e6eb
use custom binary for arm64 linux release (#1065) 2020-07-14 07:59:26 -06:00
Renovate Bot
645f0a2ff8 chore(deps): update module google.golang.org/api to v0.29.0 2020-07-14 00:08:55 +00:00
Cuong Manh Le
58fb6ea3c4
proxy: fix invalid session after logout in forward auth mode (#1062)
Currently, authorize service does handle unauthenticated request in
forward auth mode, and return status 401.

But proxy has not handled the response yet, and always returns 403 for
both unauthenticated and unauthorized request. That breaks session
handling in forward auth mode. That said, if user was signed out, or for
any reason, authorize service return 401 status, proxy does not redirect
user to re-signin, but always return 403.

To fix it, proxy is changed to handle envoy check response in more
details, to distinguish between 401 and 403 status.

Thanks to @simbaja for rasing the problem and come up with original fix.

Fixes #1014
Fixes #858
2020-07-14 01:07:49 +07:00
Renovate Bot
7437a4967d chore(deps): update module envoyproxy/go-control-plane to v0.9.6 2020-07-13 11:17:51 +00:00
Renovate Bot
fda39942ad chore(deps): update golang.org/x/net commit hash to ab34263 2020-07-13 09:31:08 +00:00
Renovate Bot
2e763ac289 chore(deps): update google.golang.org/genproto commit hash to 8698661 2020-07-13 06:14:28 +00:00
Renovate Bot
c6bdd0be5e chore(deps): update golang.org/x/crypto commit hash to 948cd5f 2020-07-13 05:14:25 +00:00
renovate[bot]
51c8de70ba
chore(deps): update module open-policy-agent/opa to v0.21.1 (#1061)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-07-12 22:13:57 -07:00
Cuong Manh Le
58f39db91d
authorize: clear session state if session was deleted in databroker (#1053)
When user signin to 2 sites "a.example.com" and "b.example.com", we're
using the same session for user when accessing those sites. When user
singout from "a.example.com", that session is marked as deleted, thus
user now can not access "b.example.com" nor re-signin to get new access.
User must wait the cookie is expired, or delete the cookie manually to
re-signin to "b.example.com".

This is also affected if user signout from authenticate service
dashboard page directly.

To fix this, we will clear the session state if the session was deleted,
authorize service will return unauthorized, so the user will be
redirected to re-authenticate.

Updates #1014
Updates #858
2020-07-11 08:46:02 +07:00
Cuong Manh Le
d40f294586
authorize: include "kid" in JWT header (#1049)
Fixes #1046
2020-07-09 12:39:53 +07:00
Cuong Manh Le
6f3817aee5
pkg/grpc: fix wrong audit protoc gen file (#1048) 2020-07-08 22:57:12 +07:00
Caleb Doxsey
73105c0b08
audit: add protobuf definitions (#1047) 2020-07-08 07:23:03 -06:00
Cuong Manh Le
de54e449f0
docs/recipes: add local oidc example (#1045)
docs/recipes: add local oidc example

Closes #1042
2020-07-08 08:59:02 +07:00
Cuong Manh Le
2c3c7b837d
docs/configuration: add doc for trailing slash limitation in "To" field (#1040)
Due to the limitation of envoy, it can't handle rewriting of "From"
field without path to a destination with path.

Updates #880
Updates #1033
2020-07-07 11:35:59 +07:00
Renovate Bot
f80a72d680 chore(deps): update google.golang.org/genproto commit hash to 8e8330b 2020-07-07 01:53:44 +00:00
Cuong Manh Le
9821476086 proxy: fix redirect url with traefik forward auth
With Traefik in forward auth mode, when accessing:

	https://example.com/foo

traefik will send a request like this to proxy:

	https://pomerium?uri=https://example.com

The path "/foo" is passed to proxy via "X-Forwarded-Uri" instead of via
query parameters. When proxy redirects request to authenticate, it only
set the "pomerirum_redirect_url" to the value of "uri".

So after authentication success, the user will be redirected to example.com
instead of example.com/foo. If "X-Forwarded-Uri" is present, we should
add it to redirect uri, so the user will be redirected to right place.
2020-07-04 01:23:44 +07:00
Cuong Manh Le
0ecdbf2db3 authenticate: fix wrong SignIn telemetry name 2020-07-04 00:46:33 +07:00
Cuong Manh Le
d764981618
internal/controlplane: set envoy prefix rewrite if present (#1034)
While at it, also refactoring buildPolicyRoutes.

Fixes #1033
Fixes #880
2020-07-03 09:35:36 +07:00
Cuong Manh Le
846d709ba4 proxy: fix wrong forward auth request
When proxy receives forward auth request, it should forward the request
as-is to authorize for verification. Currently, it composes the check
request with actual path, then send the request to authorize service.

It makes the request works accidently, because the composed check
request will satisfy the policy un-intentionally. Example, for forward
auth request:

	http://pomerium/?uri=https://httpbin.localhost.pomerium.io

the composed request will look like:

	&envoy_service_auth_v2.AttributeContext_HttpRequest{
		Method:   "GET",
		Headers:  map[string]string{},
		Path:     "",
		Host:     "httpbin.localhost.pomerium.io",
		Scheme:   "https",
	}

This check request has at least two problems.

First, it will make authorize.handleForwardAuth always returns false,
even though this is a real forward auth request. Because the "Host"
field in check request is not the forward auth host, which is "pomerium"
in this case.

Second, it will accidently matches rule like:

	policy:
	  - from: https://httpbin.localhost.pomerium.io
	    to: https://httpbin
	    allowed_domains:
	      - pomerium.io

If the rule contains other conditions, like "prefix", or "regex":

	policy:
	  - from: https://httpbin.localhost.pomerium.io
	    prefix: /headers
	    to: https://httpbin
	    allowed_domains:
	      - pomerium.io

Then the rule will never be triggered, because the "/headers" path can
be passed in request via "X-Forwarded-Uri" (traefik), instead of
directly from the path (nginx).

To fix this, we just pass the forward auth request as-is to authorize.

Fixes #873
2020-07-03 00:00:20 +07:00
Cuong Manh Le
48639a48fb authorize: honor X-Forwarded-Uri in forward auth mode
Some ingress like traefik set the X-Forwarded-Uri header instead
of passing the actual path in request, we should hornor and use
that header in forward auth mode.

While at it, refactoring the handleForwardAuth to return earlier instead
of nested condition, and add more tests to cover all cases.
2020-07-03 00:00:20 +07:00
Renovate Bot
e482fef247 chore(deps): update module google.golang.org/protobuf to v1.25.0 2020-07-02 16:07:51 +00:00
Caleb Doxsey
09621ee263
pkg: add grpcutil package (#1032) 2020-07-01 15:21:19 -06:00
Caleb Doxsey
fae02791f5
cryptutil: move to pkg dir, add token generator (#1029)
* cryptutil: move to pkg dir, add token generator

* add gitignored files

* add tests
2020-06-30 15:55:33 -06:00