Linked Credentials on PAM Records

Description of each accessible field type on PAM Resource Records

SDK Version Required: 17.1.1 or higher

The document lists out the full list of Property methods and advanced use cases when interacting with the linked credentials on PAM Resource Records:

All Property Methods

for (KeeperRecordLink link : record.getLinks()) {
    // Basic properties
    String targetUid = link.getRecordUid();
    String linkPath = link.getPath(); // e.g., "pamUser", "ai_settings", "jit_settings"
    String rawData = link.getData(); // Base64-encoded data

    // User privilege methods
    boolean isAdmin = link.isAdminUser();
    boolean isLaunchCredential = link.isLaunchCredential();

    // Permission methods
    boolean allowsRotation = link.allowsRotation();
    boolean allowsConnections = link.allowsConnections();
    boolean allowsPortForwards = link.allowsPortForwards();
    boolean allowsSessionRecording = link.allowsSessionRecording();
    boolean allowsTypescriptRecording = link.allowsTypescriptRecording();
    boolean allowsRemoteBrowserIsolation = link.allowsRemoteBrowserIsolation();

    // Settings methods
    boolean rotatesOnTermination = link.rotatesOnTermination();
    Integer dataVersion = link.getLinkDataVersion();

    // Data analysis methods
    boolean hasReadableData = link.hasReadableData();
    boolean hasEncryptedData = link.hasEncryptedData();
    boolean mightBeEncrypted = link.mightBeEncrypted();

    System.out.println("Link Analysis for " + targetUid + ":");
    System.out.println("  Path: " + linkPath);
    System.out.println("  Admin: " + isAdmin);
    System.out.println("  Launch Credential: " + isLaunchCredential);
    System.out.println("  Allows Rotation: " + allowsRotation);
    System.out.println("  Allows Connections: " + allowsConnections);
    System.out.println("  Has Encrypted Data: " + hasEncryptedData);
}

Advanced Use Cases

Advanced Data Access Patterns

Encrypted Data Handling

Settings-Specific Access Methods

Complex Relationship Analysis

Advanced PAM User Management

Comprehensive Linked Record Data Analysis

Complete Utility Methods Example

Full Method Reference

Method
Returns
Description

getRecordUid()

String

Target record UID

getPath()

String

Link metadata type

getData()

String

Raw Base64-encoded link data

isAdminUser()

boolean

User has admin privileges

isLaunchCredential()

boolean

This is a launch credential

allowsRotation()

boolean

Password rotation allowed

allowsConnections()

boolean

Connections allowed

allowsPortForwards()

boolean

Port forwarding allowed

allowsSessionRecording()

boolean

Session recording enabled

allowsTypescriptRecording()

boolean

Typescript recording enabled

allowsRemoteBrowserIsolation()

boolean

Remote browser isolation allowed

rotatesOnTermination()

boolean

Password rotates on session termination

getLinkDataVersion()

Integer

Data format version number

hasReadableData()

boolean

Data is readable JSON format

hasEncryptedData()

boolean

Data is encrypted

mightBeEncrypted()

boolean

Data might be encrypted (heuristic check)

getDecryptedData(byte[])

String

Decrypt data using record key

getDecodedData()

String

Base64 decode without decryption

getLinkData(byte[])

Map<String, Object>

Generic encrypted data access

getAiSettingsData(byte[])

Map<String, Object>

AI settings specific access

getJitSettingsData(byte[])

Map<String, Object>

JIT settings specific access

getSettingsForPath(String, byte[])

Map<String, Object>

Generic settings access by path

DAG Concepts for Infrastructure Management

Understanding Directed Acyclic Graphs

GraphSync implements a Directed Acyclic Graph structure where:

  • DIRECTED: Links have direction (A → B is different from B → A)

  • ACYCLIC: No circular references (A → B → C → A is NOT allowed)

  • GRAPH: Records (nodes) connected by links (edges)

Benefits:

  • ✅ Track dependencies ("this server needs this database")

  • ✅ Organize related credentials

  • ✅ Understand infrastructure relationships

  • ✅ Maintain security boundaries

Performance Optimization

Efficient Processing Strategies

Error Handling Best Practices

Important Implementation Notes

Critical Understanding

  • Links vs Files: The linksToRemove parameter in UpdateOptions removes FILES, not record links

  • Null vs Empty: Links field is null when requestLinks=false, empty list when requestLinks=true but no links exist

  • Performance Impact: Requesting links significantly increases response size and processing time

  • Encryption: Link data may be encrypted and requires the record's key to decrypt

Security Considerations

  • Key Management: Always use the source record's key for decrypting link data

  • Access Control: Link properties indicate what operations are permitted

  • Validation: Always check link properties before performing operations

Best Practices from Test Implementation

  1. Only request links when needed - Use requestLinks=true judiciously for performance

  2. Filter records when possible - Use recordsFilter to limit data retrieval

  3. Cache results - Build lookup maps for multiple operations on the same data

  4. Handle errors gracefully - Link data decryption and access may fail

  5. Validate assumptions - Check link properties match expected permissions

  6. Test configurations - Verify PAM setups have correct admin/launch credential counts

Kotlin Support

Last updated

Was this helpful?