Skip to content

Commit ce14edf

Browse files
authored
Merge branch 'main' into tls-key-ec-parameters
2 parents 992c68e + 2874485 commit ce14edf

682 files changed

Lines changed: 50479 additions & 9063 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/dependabot.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ updates:
118118
- dependency-name: "github.com/envoyproxy/go-control-plane*"
119119
# Ignore all k8s.io packages on release branches to avoid unintended k8s version bumps
120120
- dependency-name: "k8s.io/*"
121+
# Ignore sigs.k8s.io/gateway-api on release branches to avoid unintended Gateway API version bumps
122+
- dependency-name: "sigs.k8s.io/gateway-api"
121123
groups:
122124
gomod:
123125
patterns:
@@ -169,6 +171,8 @@ updates:
169171
- dependency-name: "github.com/envoyproxy/go-control-plane*"
170172
# Ignore all k8s.io packages on release branches to avoid unintended k8s version bumps
171173
- dependency-name: "k8s.io/*"
174+
# Ignore sigs.k8s.io/gateway-api on release branches to avoid unintended Gateway API version bumps
175+
- dependency-name: "sigs.k8s.io/gateway-api"
172176
groups:
173177
gomod:
174178
patterns:

.github/workflows/build_and_test.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
outputs:
2828
run_test_workflow: ${{ steps.check-changes.outputs.run_test_workflow }}
2929
steps:
30-
- uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
30+
- uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2
3131
id: check-changes
3232
# A dependent job will be automatically skipped if its parent job is skipped.
3333
# So we skip this step in pull_request event if the changes are not relevant.
@@ -368,7 +368,7 @@ jobs:
368368

369369
# build and push image
370370
- name: Login to DockerHub
371-
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
371+
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
372372
with:
373373
username: ${{ vars.DOCKERHUB_USERNAME }}
374374
password: ${{ secrets.DOCKERHUB_PASSWORD }}

.github/workflows/codeql.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ jobs:
3636
- uses: ./tools/github-actions/setup-deps
3737

3838
- name: Initialize CodeQL
39-
uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v3.29.5
39+
uses: github/codeql-action/init@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v3.29.5
4040
with:
4141
languages: ${{ matrix.language }}
4242

4343
- name: Autobuild
44-
uses: github/codeql-action/autobuild@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v3.29.5
44+
uses: github/codeql-action/autobuild@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v3.29.5
4545

4646
- name: Perform CodeQL Analysis
47-
uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v3.29.5
47+
uses: github/codeql-action/analyze@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v3.29.5
4848
with:
4949
category: "/language:${{matrix.language}}"

.github/workflows/docs.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
- uses: ./tools/github-actions/setup-deps
4949

5050
- name: Setup Node
51-
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
51+
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
5252
with:
5353
node-version-file: site/.nvmrc
5454

.github/workflows/osv-scanner.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ permissions:
1919
jobs:
2020
scan-scheduled:
2121
if: ${{ github.event_name == 'push' || github.event_name == 'schedule' }}
22-
uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@fa4ff678dd5d0a4fa3d628e57af8162873e93cd6" # main, pending release > v2.3.8 (incl. osv-scanner-action#130)
22+
uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@a82132c0bd6c7261ffcb78e754c46c70ab57ad9a" # main, pending release > v2.3.8 (incl. osv-scanner-action#130)
2323
with:
2424
scan-args: |-
2525
--config tools/osv-scanner/vulnerability-scan-config.toml
@@ -33,7 +33,7 @@ jobs:
3333

3434
scan-pr:
3535
if: ${{ github.event_name == 'pull_request' || github.event_name == 'merge_group' }}
36-
uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable-pr.yml@fa4ff678dd5d0a4fa3d628e57af8162873e93cd6" # main, pending release > v2.3.8 (incl. osv-scanner-action#130)
36+
uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable-pr.yml@a82132c0bd6c7261ffcb78e754c46c70ab57ad9a" # main, pending release > v2.3.8 (incl. osv-scanner-action#130)
3737
with:
3838
scan-args: |-
3939
--config tools/osv-scanner/vulnerability-scan-config.toml

.github/workflows/release.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ jobs:
107107
} >> "$GITHUB_ENV"
108108
109109
- name: Login to DockerHub
110-
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
110+
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
111111
with:
112112
username: ${{ vars.DOCKERHUB_USERNAME }}
113113
password: ${{ secrets.DOCKERHUB_PASSWORD }}
@@ -159,7 +159,7 @@ jobs:
159159
160160
- name: Upload Release Manifests
161161
if: ${{ !contains(github.ref, '-rc.0') }}
162-
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
162+
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
163163
with:
164164
files: |
165165
release-artifacts/install.yaml

.github/workflows/scorecard.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,6 @@ jobs:
4040
retention-days: 5
4141

4242
- name: "Upload to code-scanning"
43-
uses: github/codeql-action/upload-sarif@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v3.29.5
43+
uses: github/codeql-action/upload-sarif@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v3.29.5
4444
with:
4545
sarif_file: results.sarif

.github/workflows/stale.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818

1919
steps:
2020
- name: Prune Stale
21-
uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0
21+
uses: actions/stale@1e223db275d687790206a7acac4d1a11bd6fe629 # v10.4.0
2222
with:
2323
repo-token: ${{ secrets.GITHUB_TOKEN }}
2424
days-before-pr-stale: 30

SECURITY.md

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,55 @@
11
# Security Policy
22

3-
## Reporting a Vulnerability or a Crash
3+
## Reporting a Vulnerability or Crash
44

5-
We take security seriously and appreciate your help in identifying and responsibly disclosing vulnerabilities to protect our users.
5+
Please report suspected vulnerabilities privately.
66

77
To report a security issue:
88

99
1. **Do not open a public issue** on the GitHub repository to disclose a vulnerability.
1010
2. Send an email to our security team at [envoy-gateway-security@googlegroups.com](mailto:envoy-gateway-security@googlegroups.com).
1111
3. Include the following details in your email:
12-
- A detailed description of the vulnerability.
13-
- Steps to reproduce the issue.
14-
- Potential impact of the vulnerability.
15-
- Any suggested remediation or patches (if applicable).
12+
- Description of the vulnerability.
13+
- Steps to reproduce it.
14+
- Potential impact.
15+
- Suggested fixes or patches, if any.
1616

17-
We aim to respond to vulnerability reports within **48 hours** and will work with you to validate and address the issue.
18-
Once a resolution is identified, we will coordinate a release timeline with you and provide credit if applicable (with your consent).
17+
We aim to respond within **3 business days**. If the issue is confirmed, we will coordinate the release timeline with you and credit you if applicable and with your consent.
1918

20-
## Security Updates
19+
## Vulnerability Review and Fix Process
2120

22-
Security patches are announced through:
21+
The Envoy Gateway security team at [envoy-gateway-security@googlegroups.com](mailto:envoy-gateway-security@googlegroups.com) reviews reports privately. The team checks scope, validates the issue, asks for details when needed, and identifies affected versions and impact.
2322

23+
After initial validation, accepted vulnerabilities are tracked in a draft GitHub Security Advisory. The advisory tracks affected versions, severity, CVSS assessment, credits, fix status, and disclosure plan. The team evaluates vulnerabilities against the [Envoy Gateway threat model](https://gateway.envoyproxy.io/latest/tasks/security/threat-model/). Severity guides urgency, disclosure planning, and whether the fix needs a coordinated patch release. When appropriate, the team requests or attaches a CVE before public disclosure.
24+
25+
The team assigns fixes to security team members or Envoy Gateway maintainers with the right expertise. Fixes for accepted, undisclosed vulnerabilities are developed privately until coordinated disclosure, using a GitHub Security Advisory temporary private fork when appropriate, and coordinated with release managers for affected active branches. Accepted privately disclosed vulnerabilities are fixed in supported, non-EOL release branches or publicly disclosed within **90 days**. In exceptional circumstances, the team may coordinate an extension with the reporter.
26+
27+
Once fixes are ready for supported versions, we publish the advisory and announce the patched releases through the channels below.
28+
29+
## Public Vulnerability Disclosure
30+
31+
The Envoy Gateway security team and release managers coordinate public disclosure for affected release branches.
32+
33+
Publicly disclosed vulnerabilities are handled urgently. If the issue affects a supported release, the team publishes patched releases unless the issue does not affect production usage or can be safely handled through the normal release process.
34+
35+
We announce advisories and patched releases through:
36+
37+
- [GitHub Security Advisories](https://github.com/envoyproxy/gateway/security/advisories)
2438
- The [GitHub Releases page](https://github.com/envoyproxy/gateway/releases)
39+
- The `#gateway-users` channel in the [Envoy Slack workspace](https://communityinviter.com/apps/envoyproxy/envoy)
40+
- The [envoy-gateway-announce mailing list](https://groups.google.com/g/envoy-gateway-announce)
2541

26-
To stay up-to-date with the latest security updates, we recommend subscribing to these channels.
42+
Security fixes are merged into active, non-EOL release branches as patch releases when the affected versions are still supported. See the [release matrix](https://gateway.envoyproxy.io/news/releases/matrix/) for support windows and the [patch release process](https://gateway.envoyproxy.io/community/releasing/#patch-release) for release mechanics.
43+
44+
Subscribe to these channels for security updates.
2745

2846
## Best Practices for Secure Usage
2947

30-
To minimize security risks when using Envoy Gateway:
48+
To reduce risk:
3149

3250
- Use the latest supported version of Envoy Gateway.
3351
- Regularly monitor for updates and apply patches promptly.
3452

3553
## Contact
3654

37-
If you have any questions about this security policy, please contact us at [envoy-gateway-security@googlegroups.com](mailto:envoy-gateway-security@googlegroups.com).
38-
39-
Thank you for helping us ensure the security of Envoy Gateway!
55+
Questions? Email [envoy-gateway-security@googlegroups.com](mailto:envoy-gateway-security@googlegroups.com).

api/v1alpha1/authorization_types.go

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ type Authorization struct {
3030
}
3131

3232
// AuthorizationRule defines a single authorization rule.
33+
//
34+
// +kubebuilder:validation:XValidation:rule="has(self.principal) || has(self.cel)",message="at least one of principal or cel must be specified"
3335
type AuthorizationRule struct {
3436
// Name is a user-friendly name for the rule.
3537
// If not specified, Envoy Gateway will generate a unique name for the rule.
@@ -52,9 +54,45 @@ type AuthorizationRule struct {
5254
// If there are multiple principal types, all principals must match for the rule to match.
5355
// For example, if there are two principals: one for client IP and one for JWT claim,
5456
// the rule will match only if both the client IP and the JWT claim match.
55-
Principal Principal `json:"principal"`
57+
//
58+
// +optional
59+
Principal *Principal `json:"principal,omitempty"`
60+
61+
// CEL specifies a Common Expression Language expression to evaluate for the
62+
// request. If specified, the expression must evaluate to true for the rule to match.
63+
//
64+
// The expression can use Envoy attributes exposed to the CEL runtime.
65+
// Request attributes, such as request.path, request.url_path, request.host,
66+
// request.scheme, request.method, request.headers, and request.query, are
67+
// generally available during authorization. Connection attributes, such as
68+
// source.address, source.port, destination.address, destination.port,
69+
// connection.mtls, and connection.requested_server_name, may also be used.
70+
// Dynamic metadata and filter state produced by earlier filters may also be
71+
// available through attributes such as metadata and filter_state.
72+
// Response attributes are only available after the request completes and
73+
// should not be used for authorization decisions.
74+
//
75+
// For more details, see:
76+
// https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/advanced/attributes
77+
//
78+
// The rule matches only when the expression evaluates to a boolean true.
79+
// Non-boolean results, false, null, and CEL evaluation errors are treated as
80+
// no match.
81+
//
82+
// Examples:
83+
// `request.headers['x-tenant'] == 'team-a'`
84+
// `request.method == 'POST' && request.path.startsWith('/admin')`
85+
//
86+
// +optional
87+
CEL *CELExpression `json:"cel,omitempty"`
5688
}
5789

90+
// CELExpression specifies a CEL expression.
91+
//
92+
// +kubebuilder:validation:MinLength=1
93+
// +kubebuilder:validation:MaxLength=4096
94+
type CELExpression string
95+
5896
// Operation specifies the operation of a request.
5997
//
6098
// +kubebuilder:validation:XValidation:rule="has(self.methods) || has(self.path)",message="at least one of methods or path must be specified"
@@ -126,7 +164,8 @@ type Principal struct {
126164
//
127165
// If multiple entries are specified, one of the ClientIPGeoLocation entries must match for the rule to match.
128166
//
129-
// The client IP is inferred from the X-Forwarded-For header or a custom header.
167+
// The client IP is inferred from the X-Forwarded-For header, a custom header, or the
168+
// direct downstream connection source address (the TCP peer of the connection terminated by Envoy).
130169
// You can use the `ClientIPDetection` field in the `ClientTrafficPolicy` to configure the client IP detection.
131170
//
132171
// +optional

0 commit comments

Comments
 (0)