Skip to content

PM-947 privileged cloud management#1909

Closed
erinlewis-keeper wants to merge 36 commits intoreleasefrom
PM-947-privileged-cloud-management
Closed

PM-947 privileged cloud management#1909
erinlewis-keeper wants to merge 36 commits intoreleasefrom
PM-947-privileged-cloud-management

Conversation

@erinlewis-keeper
Copy link
Copy Markdown
Contributor

@erinlewis-keeper erinlewis-keeper commented Mar 30, 2026

Adds a full suite of Privileged Cloud Management commands to Keeper Commander, covering two major areas:

  1. Privileged Access Commands (pam access)
  • pam access user list/provision/deprovision — manage users in cloud IdPs (Azure, GCP, Okta, AWS)
  • pam access group list/add/remove — manage IdP group membership
  • Field encryption for user/meta data sent to gateway, with response decryption
  • Domain validation against IdP before sending approval notifications
  • --save-record / --delete-record flags to create/remove pamUser records on provision/deprovision
  1. Workflow Access Commands (pam_privileged_workflow.py)
  • pam workflow request — request elevated access to a resource (with krouter workflow API)
  • pam workflow status — list active access requests with time remaining
  • pam workflow requests — list pending approvals
  • pam workflow approve — approve or deny workflow requests
  • pam workflow revoke — end active access sessions
  • pam workflow config — read and configure workflow settings (access length, approvers, etc.)
  1. Supporting changes
  • New protobuf definitions (workflow_pb2.py) for workflow messages
  • New DTO classes for gateway IdP actions
  • IdP config UID field added to PAM config records
  • Supershell and terminal connection bugfixes

idimov-keeper and others added 30 commits February 26, 2026 20:09
Bugfix: jit/ai encryption settings
Records created via Commander were missing field label metadata
because the record-add command used an empty string as default
when the schema field had no explicit label override. This caused
blank field names when records were retrieved via KSM.

Use the field $ref type as the default label when no explicit
label is defined in the record type schema, matching the behavior
of the web vault which consistently populates labels for all
schema-defined fields.

Affected paths:
- RecordAddCommand.execute() in commands/record_edit.py
- prepare_record_add_or_update() in importer/imp_exp.py

Refs: KC-1163
…1849)

* Create kcm_export.py

Add folder and script to convert KCM resources to PAM Project Extend template

* Create KCM_mappings.json

Add mapping dictionary of KCM parameters, to use in conjunction with the kcm_export.py script

* Added comment about KCM_mappings

* Fixed syntax for f strings with older python version

Older versions of python don't support using the same quote characters on f strings - fixed

* Updated naming scheme for resource
…ements (#1854)

* Create kcm_export.py

Add folder and script to convert KCM resources to PAM Project Extend template

* Create KCM_mappings.json

Add mapping dictionary of KCM parameters, to use in conjunction with the kcm_export.py script

* Added comment about KCM_mappings

* Fixed syntax for f strings with older python version

Older versions of python don't support using the same quote characters on f strings - fixed

* Updated naming scheme for resource

* Add support for template file to PAM KCM import script + general improvements

- A prompt now exists to collect a template JSON file.
- Added deepcopies to ensure no reference problem
- Improved nested dictionary function
- Support for adding file path encapsulated in quotes
initial implementation of credential request, notifications not working
* KC-1116: Bugfix changes

* Kepm Pr review changes
…key' (#1862)

# Conflicts:
#	keepercommander/commands/enterprise_api_keys.py
#	unit-tests/test_command_enterprise_api_keys.py
Change List:
   - Added GatewayActionIdpInputs and 5 GatewayAction subclasses for IdP operations in pam_dto.py
   - Added pam_idp.py with resolve_idp_config helper and full command hierarchy (pam idp user/group)
   - Added PAMIdpCommand registration in discoveryrotation.py under PAMControllerCommand
   - Added 27 unit tests for DTOs, config resolution, and command structure in test_pam_idp.py
Change List:
   - Added GatewayActionIdpValidateDomain DTO for rm-validate-domain action
   - Updated pam request-access to validate user domain against IdP before sending approval notification
   - Uncommented notification API call in pam request-access
Change List:
   - Added field encryption for user/meta fields sent to gateway using record key
   - Added gateway response decryption for group list and provision commands
   - Added --domain flag to provision with validation for username format
   - Added --save-record flag to save provisioned user as pamUser record with Azure User ID
   - Added --delete-record flag to deprovision to remove associated pamUser record
   - Added friendly error message parsing for Azure API errors
   - Updated all IdP commands to check data.success in gateway responses
Change List:
   - Fix GCP user provisioning response parsing (handle dict name field)
   - Add dynamic IdP User ID labels based on provider type (Azure, GCP, Okta, AWS, Domain)
   - Fix pamUser record lookup to support prefix login matching (username without domain)
   - Generalize IdP User ID custom field labels in deprovision flow
Change List:
   - Rewrote pam request-access to use krouter workflow API instead of keeperapp notifications
   - Added workflow_pb2.py protobuf definitions for workflow messages
   - Added pam access-state command to list active access requests
   - Added pam approval-requests command to list pending approvals
   - Added pam approve-access command to approve or deny workflow requests
   - Added pam revoke-access command to end active access sessions
   - Added pam workflow-config command to read and configure workflow settings
   - Registered all new commands in discoveryrotation.py
Change List:
   - Add pam access-state command with optional record UID and time remaining display
   - Add pam workflow-config command for reading and setting workflow configuration
   - Fix accessLength to use milliseconds (proto field is in ms, CLI accepts seconds)
   - Update workflow_pb2.py with full WorkflowStatus fields (startedOn, expiresOn, approvedBy)
@erinlewis-keeper erinlewis-keeper changed the base branch from master to release March 30, 2026 18:28
@erinlewis-keeper erinlewis-keeper marked this pull request as ready for review March 31, 2026 17:33
@erinlewis-keeper erinlewis-keeper changed the title Pm 947 privileged cloud management PM-947 privileged cloud management Apr 1, 2026
@erinlewis-keeper
Copy link
Copy Markdown
Contributor Author

closed as we have the changes in #1920

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants