Skip to content

Conversation

@jakedoublev
Copy link
Contributor

@jakedoublev jakedoublev commented Jun 4, 2025

Proposed Changes

  • Remove gRPC gateway where not needed
  • Preserves GetAttributesByValueFQNs (for KAS/key grants to attribute values/definitions/namespaces)
  • Preserves ListKeyAccessServers for KAS allowlisting

Checklist

  • I have added or updated unit tests
  • I have added or updated integration tests (if appropriate)
  • I have added or updated documentation

Testing Instructions

@github-actions github-actions bot added external-contributor External Org Member comp:policy Policy Configuration ( attributes, subject mappings, resource mappings, kas registry) docs Documentation size/m labels Jun 4, 2025
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello @jakedoublev, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

Summary of Changes

Hello team, gemini-code-assist here to provide a summary of this pull request. This PR focuses on removing the gRPC gateway HTTP bindings from various services within the policy component, with the explicit exception of the GetAttributeValuesByFqns method in the AttributesService. This change primarily affects the AttributesService, KeyAccessServerRegistryService, NamespaceService, ResourceMappingService, and UnsafeService, removing their RESTful HTTP interfaces generated by the gRPC gateway. Corresponding documentation has also been updated to reflect these changes.

Highlights

  • gRPC Gateway Removal: Most gRPC gateway HTTP bindings have been removed from the policy service's RPCs.
  • Exception for GetAttributeValuesByFqns: The GetAttributeValuesByFqns method in the AttributesService retains its gRPC gateway binding.
  • Documentation Updates: The docs/grpc/index.html file has been updated to remove the documentation for the removed HTTP bindings.
  • Service Registration Changes: The registration of the gRPC gateway handlers has been removed for the affected services in their respective Go files.

Changelog

Click here to see the changelog
  • docs/grpc/index.html
    • Removed documentation for HTTP bindings for most methods in AttributesService, KeyAccessServerRegistryService, NamespaceService, ResourceMappingService, and UnsafeService.
    • Retained documentation for the HTTP binding of GetAttributeValuesByFqns.
    • Added GetAttributeValue to the list of methods with NO_SIDE_EFFECTS idempotency level.
  • service/policy/attributes/attributes.proto
    • Removed google.api.http options from most RPCs.
    • Retained google.api.http option for GetAttributeValuesByFqns.
    • Added idempotency_level = NO_SIDE_EFFECTS; option to GetAttributeValue.
  • service/policy/kasregistry/key_access_server_registry.go
    • Removed the registration of the gRPC gateway handler (GRPCGatewayFunc).
  • service/policy/kasregistry/key_access_server_registry.proto
    • Removed the import of google/api/annotations.proto.
    • Removed google.api.http options from all RPCs.
  • service/policy/namespaces/namespaces.go
    • Removed the registration of the gRPC gateway handler (GRPCGatewayFunc).
  • service/policy/namespaces/namespaces.proto
    • Removed the import of google/api/annotations.proto.
    • Removed google.api.http options from all RPCs.
  • service/policy/resourcemapping/resource_mapping.go
    • Removed the registration of the gRPC gateway handler (GRPCGatewayFunc).
  • service/policy/resourcemapping/resource_mapping.proto
    • Removed the import of google/api/annotations.proto.
    • Removed google.api.http options from all RPCs.
  • service/policy/unsafe/unsafe.proto
    • Removed the import of google/api/annotations.proto.
    • Removed google.api.http options from all RPCs.
    • Removed comment indicating the service was 'IN FLIGHT AND NOT YET IMPLEMENTED!'.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.


HTTP bindings stripped away,
Except for FQNs, they say.
Protobufs now reign,
Less RESTful pain,
In policy's gRPC day.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request aims to remove gRPC gateway bindings for most policy services, with a specific exception for the GetAttributeValuesByFqns method in the AttributesService. The changes made to the .proto files, Go service registration files, and the auto-generated HTML documentation appear to correctly implement this intent.

However, there are significant concerns regarding testing and the completeness of the pull request description that need to be addressed.

Summary of Findings

  • Missing Tests: The pull request description indicates that no unit or integration tests have been added or updated. Removing API endpoints (gRPC gateway) is a significant change that can impact clients. It's crucial to have tests to verify that:
  1. The intended endpoints are indeed removed and no longer accessible via HTTP.
  2. The GetAttributeValuesByFqns method in AttributesService remains accessible via HTTP as intended.
  3. Other services/methods do not inadvertently become accessible or inaccessible.
    Without tests, there's a risk of regressions or incorrect behavior.
  • Pull Request Description and Documentation: The pull request description is very sparse, with only an asterisk under "Proposed Changes". A more detailed description explaining the motivation, the scope of changes, and potential impact on consumers would be highly beneficial. While the auto-generated gRPC documentation (docs/grpc/index.html) has been updated, the checklist also mentions general documentation. It's unclear if other forms of documentation (e.g., API guides, client migration notes) require updates due to these endpoint removals.
  • Code Changes Correctness: The core changes to .proto files (removing google.api.http options) and Go service registrations (removing GRPCGatewayFunc) appear to correctly implement the goal of disabling the gRPC gateway for the specified services, while preserving it for GetAttributeValuesByFqns.

Merge Readiness

While the code changes for removing gRPC gateway functionality seem technically correct according to the PR's intent, I strongly recommend against merging this pull request in its current state. The absence of any new or updated tests for such a significant API change is a critical issue. Additionally, the pull request description should be expanded to provide better context for reviewers and future reference.

Specifically, the following should be addressed before this PR is considered for merging:

  1. Add comprehensive tests: Unit and integration tests are needed to confirm the correct removal of HTTP endpoints and the continued functioning of the GetAttributeValuesByFqns endpoint via the gateway.
  2. Expand PR Description: Provide details on the motivation, changes, and any potential impact on clients.
  3. Confirm Documentation Status: Clarify if any other user-facing documentation needs updates beyond the auto-generated gRPC docs.

As a reviewer, I am not authorized to approve pull requests. Please ensure these concerns are addressed and further reviews are conducted before merging.

@github-actions
Copy link
Contributor

github-actions bot commented Jun 4, 2025

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 5000
Denied Decision Requests 0
Total Time 464.532142ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 5000
Denied Decision Requests 0
Total Time 295.964809ms

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 350.138282ms
Throughput 285.60 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 51.85908017s
Average Latency 515.929317ms
Throughput 96.42 requests/second

NANOTDF Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 4946
Failed Requests 54
Concurrent Requests 50
Total Time 43.771411148s
Average Latency 431.334302ms
Throughput 113.00 requests/second

Error Summary:

Error Message Occurrences
ReadNanoTDF error: getNanoRewrapKey: rewrapError: internal: internal error
rpc error: code = Internal desc = could not perform access
54 occurrences

Standard Benchmark Metrics Skipped or Failed

@github-actions
Copy link
Contributor

github-actions bot commented Jun 4, 2025

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 5000
Denied Decision Requests 0
Total Time 454.585263ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 5000
Denied Decision Requests 0
Total Time 294.649042ms

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 342.558053ms
Throughput 291.92 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 53.129646446s
Average Latency 527.877754ms
Throughput 94.11 requests/second

NANOTDF Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 4946
Failed Requests 54
Concurrent Requests 50
Total Time 44.170763847s
Average Latency 435.814181ms
Throughput 111.97 requests/second

Error Summary:

Error Message Occurrences
ReadNanoTDF error: getNanoRewrapKey: rewrapError: internal: internal error
rpc error: code = Internal desc = could not perform access
54 occurrences

Standard Benchmark Metrics Skipped or Failed

@jakedoublev jakedoublev changed the title fix(policy): remove gRPC gateway in policy except attribute get by FQNs fix(policy): remove gRPC gateway in policy except where needed Jun 4, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Jun 4, 2025

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 5000
Denied Decision Requests 0
Total Time 449.451127ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 5000
Denied Decision Requests 0
Total Time 304.492776ms

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 364.419833ms
Throughput 274.41 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 56.981945224s
Average Latency 568.254479ms
Throughput 87.75 requests/second

NANOTDF Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 4948
Failed Requests 52
Concurrent Requests 50
Total Time 48.058442599s
Average Latency 474.145505ms
Throughput 102.96 requests/second

Error Summary:

Error Message Occurrences
ReadNanoTDF error: getNanoRewrapKey: rewrapError: internal: internal error
rpc error: code = Internal desc = could not perform access
52 occurrences

Standard Benchmark Metrics Skipped or Failed

@jakedoublev jakedoublev marked this pull request as ready for review June 4, 2025 19:52
@jakedoublev jakedoublev requested review from a team as code owners June 4, 2025 19:52
@github-actions
Copy link
Contributor

github-actions bot commented Jun 4, 2025

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 5000
Denied Decision Requests 0
Total Time 478.739926ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 5000
Denied Decision Requests 0
Total Time 302.510234ms

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 362.809052ms
Throughput 275.63 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 55.095513869s
Average Latency 548.371515ms
Throughput 90.75 requests/second

NANOTDF Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 4944
Failed Requests 56
Concurrent Requests 50
Total Time 46.705723095s
Average Latency 460.224895ms
Throughput 105.85 requests/second

Error Summary:

Error Message Occurrences
ReadNanoTDF error: getNanoRewrapKey: rewrapError: internal: internal error
rpc error: code = Internal desc = could not perform access
56 occurrences

Standard Benchmark Metrics Skipped or Failed

@jakedoublev jakedoublev enabled auto-merge June 4, 2025 20:06
@jrschumacher
Copy link
Member

LGTM breaking change is of no consequence

@jrschumacher jrschumacher disabled auto-merge June 4, 2025 20:06
@jrschumacher jrschumacher merged commit 1937acb into main Jun 4, 2025
25 of 28 checks passed
@jrschumacher jrschumacher deleted the fix/grpc-gateway branch June 4, 2025 20:07
github-merge-queue bot pushed a commit that referenced this pull request Jun 5, 2025
🤖 I have created a release *beep* *boop*
---


##
[0.4.0](protocol/go/v0.3.6...protocol/go/v0.4.0)
(2025-06-05)


### Features

* **authz:** improve v2 request proto validation
([#2357](#2357))
([f927b99](f927b99))
* **policy:** cache SubjectConditionSet selectors in dedicated column
maintained via trigger
([#2320](#2320))
([215791f](215791f))
* **policy:** Return Simple Kas Keys from non-Key RPCs
([#2387](#2387))
([5113e0e](5113e0e))
* **policy:** Update simple kas key
([#2378](#2378))
([09d8239](09d8239))


### Bug Fixes

* **policy:** protovalidate deprecated action types and removal of gRPC
gateway in subject mappings svc
([#2377](#2377))
([54a6de0](54a6de0))
* **policy:** remove gRPC gateway in policy except where needed
([#2382](#2382))
([1937acb](1937acb))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: opentdf-automation[bot] <149537512+opentdf-automation[bot]@users.noreply.github.com>
github-merge-queue bot pushed a commit that referenced this pull request Jun 6, 2025
🤖 I have created a release *beep* *boop*
---


##
[0.6.0](service/v0.5.5...service/v0.6.0)
(2025-06-06)


### Features

* **authz:** DSPX-894 auth svc registered resource GetEntitlement
support ([#2358](#2358))
([a199aa7](a199aa7))
* **authz:** improve v2 request proto validation
([#2357](#2357))
([f927b99](f927b99))
* **core:** DSPX-608 - Deprecate public_client_id
([#2185](#2185))
([0f58efa](0f58efa))
* **policy:** Return Simple Kas Keys from non-Key RPCs
([#2387](#2387))
([5113e0e](5113e0e))
* **policy:** Unique name for the key provider.
([#2391](#2391))
([bb58b78](bb58b78))
* **policy:** Update simple kas key
([#2378](#2378))
([09d8239](09d8239))


### Bug Fixes

* **deps:** bump github.com/opentdf/platform/protocol/go from 0.3.6 to
0.4.0 in /service
([#2399](#2399))
([1c6fa75](1c6fa75))
* **deps:** bump the external group across 1 directory with 21 updates
([#2401](#2401))
([3d0d4d1](3d0d4d1))
* **policy:** move action sub queries to CTE in sm list and match sql
([#2369](#2369))
([0fd6feb](0fd6feb))
* **policy:** protovalidate deprecated action types and removal of gRPC
gateway in subject mappings svc
([#2377](#2377))
([54a6de0](54a6de0))
* **policy:** remove gRPC gateway in policy except where needed
([#2382](#2382))
([1937acb](1937acb))
* **policy:** remove support for creation/updation of SubjectMappings
with deprecated proto actions
([#2373](#2373))
([3660200](3660200))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: opentdf-automation[bot] <149537512+opentdf-automation[bot]@users.noreply.github.com>
github-merge-queue bot pushed a commit that referenced this pull request Aug 9, 2025
🤖 I have created a release *beep* *boop*
---


##
[0.7.0](protocol/go/v0.6.2...protocol/go/v0.7.0)
(2025-08-08)


### ⚠ BREAKING CHANGES

* **policy:** disable kas grants in favor of key mappings
([#2220](#2220))
* **core:** Require go 1.23+
([#1979](#1979))

### Features

* add ability to retrieve policy resources by id or name
([#1901](#1901))
([deb4455](deb4455))
* **authz:** authz v2, ers v2 protos and gencode for ABAC with actions &
registered resource
([#2124](#2124))
([ea7992a](ea7992a))
* **authz:** improve v2 request proto validation
([#2357](#2357))
([f927b99](f927b99))
* **authz:** sensible request limit upper bounds
([#2526](#2526))
([b3093cc](b3093cc))
* **core:** adds bulk rewrap to sdk and service
([#1835](#1835))
([11698ae](11698ae))
* **core:** EXPERIMENTAL: EC-wrapped key support
([#1902](#1902))
([652266f](652266f))
* **core:** Require go 1.23+
([#1979](#1979))
([164c922](164c922))
* **core:** v2 ERS with proto updates
([#2210](#2210))
([a161ef8](a161ef8))
* **policy:** add enhanced standard/custom actions protos
([#2020](#2020))
([bbac53f](bbac53f))
* **policy:** Add legacy keys.
([#2613](#2613))
([57370b0](57370b0))
* **policy:** Add list key mappings rpc.
([#2533](#2533))
([fbc2724](fbc2724))
* **policy:** add obligation protos
([#2579](#2579))
([50882e1](50882e1))
* **policy:** Add validation to delete keys
([#2576](#2576))
([cc169d9](cc169d9))
* **policy:** add values to CreateObligationRequest
([#2614](#2614))
([94535cc](94535cc))
* **policy:** adds new public keys table
([#1836](#1836))
([cad5048](cad5048))
* **policy:** Allow the deletion of a key.
([#2575](#2575))
([82b96f0](82b96f0))
* **policy:** cache SubjectConditionSet selectors in dedicated column
maintained via trigger
([#2320](#2320))
([215791f](215791f))
* **policy:** Change return type for delete key proto.
([#2566](#2566))
([c1ae924](c1ae924))
* **policy:** Default Platform Keys
([#2254](#2254))
([d7447fe](d7447fe))
* **policy:** disable kas grants in favor of key mappings
([#2220](#2220))
([30f8cf5](30f8cf5))
* **policy:** DSPX-1018 NDR retrieval by FQN support
([#2131](#2131))
([0001041](0001041))
* **policy:** DSPX-1057 registered resource action attribute values
(protos only) ([#2217](#2217))
([6375596](6375596))
* **policy:** DSPX-893 NDR define crud protos
([#2056](#2056))
([55a5c27](55a5c27))
* **policy:** DSPX-902 NDR service crud protos only (1/2)
([#2092](#2092))
([24b6cb5](24b6cb5))
* **policy:** Finish resource mapping groups
([#2224](#2224))
([5ff754e](5ff754e))
* **policy:** key management crud
([#2110](#2110))
([4c3d53d](4c3d53d))
* **policy:** Key management proto
([#2115](#2115))
([561f853](561f853))
* **policy:** Modify get request to search for keys by kasid with keyid.
([#2147](#2147))
([780d2e4](780d2e4))
* **policy:** Return KAS Key structure
([#2172](#2172))
([7f97b99](7f97b99))
* **policy:** Return Simple Kas Keys from non-Key RPCs
([#2387](#2387))
([5113e0e](5113e0e))
* **policy:** rotate keys rpc
([#2180](#2180))
([0d00743](0d00743))
* **policy:** Update key status's and UpdateKey rpc.
([#2315](#2315))
([7908db9](7908db9))
* **policy:** Update simple kas key
([#2378](#2378))
([09d8239](09d8239))


### Bug Fixes

* add pagination to list public key mappings response
([#1889](#1889))
([9898fbd](9898fbd))
* **core:** Allow 521 curve to be used
([#2485](#2485))
([aaf43dc](aaf43dc))
* **core:** Fixes protoJSON parse bug on ec rewrap
([#1943](#1943))
([9bebfd0](9bebfd0))
* **core:** Update fixtures and flattening in sdk and service
([#1827](#1827))
([d6d6a7a](d6d6a7a))
* **deps:** bump toolchain in /lib/fixtures and /examples to resolve CVE
GO-2025-3563 ([#2061](#2061))
([9c16843](9c16843))
* **policy:** protovalidate deprecated action types and removal of gRPC
gateway in subject mappings svc
([#2377](#2377))
([54a6de0](54a6de0))
* **policy:** remove gRPC gateway in policy except where needed
([#2382](#2382))
([1937acb](1937acb))
* **policy:** remove new public keys rpc's
([#1962](#1962))
([5049bab](5049bab))
* **policy:** remove predefined rules in actions protos
([#2069](#2069))
([060f059](060f059))
* **policy:** return kas uri on keys for definition, namespace and
values ([#2186](#2186))
([6c55fb8](6c55fb8))
* **sdk:** Fix compatibility between bulk and non-bulk rewrap
([#1914](#1914))
([74abbb6](74abbb6))
* update key_mode to provide more context
([#2226](#2226))
([44d0805](44d0805))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: opentdf-automation[bot] <149537512+opentdf-automation[bot]@users.noreply.github.com>
Co-authored-by: Krish Suchak <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp:policy Policy Configuration ( attributes, subject mappings, resource mappings, kas registry) docs Documentation external-contributor External Org Member size/m

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants