ಏಜೆಂಟ್ ಗಾರ್ಡ್ರೈಲ್ಸ್ ಮತ್ತು ರನ್ಟೈಮ್ LDAP ಕಾನ್ಫಿಗರೇಶನ್
ನಾನು ಇಂದು ಎರಡು ವಿಭಿನ್ನ ಸಮಸ್ಯೆಗಳ ಮೇಲೆ ಕೆಲಸ ಮಾಡಿದೆ. ಎರಡೂ ಒಂದೇ ಗುರಿಯನ್ನು ಹೊಂದಿದ್ದವು: ಮಿತಿಗಳನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಮತ್ತು ನಿಯಂತ್ರಿಸಲು ಸುಲಭವಾಗುವಂತೆ ಮಾಡುವುದು.
ಮೊದಲ ಕಾರ್ಯವು AI ಏಜೆಂಟ್ಗಾಗಿ MCP ಪರಿಕರಗಳನ್ನು (tools) ನಿರ್ಮಿಸುವುದನ್ನು ಒಳಗೊಂಡಿತ್ತು. ಈ ಏಜೆಂಟ್ ಈವೆಂಟ್ಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡುವುದು, ಸಿದ್ಧತೆಯನ್ನು ಪರಿಶೀಲಿಸುವುದು ಮತ್ತು ಅಪ್ಡೇಟ್ಗಳನ್ನು ಪ್ರಕಟಿಸುವ ಮೂಲಕ ಈವೆಂಟ್ ಪ್ಲಾಟ್ಫಾರ್ಮ್ ಅನ್ನು ನಿರ್ವಹಿಸಬೇಕೆಂದು ನಾನು ಬಯಸಿದ್ದೆ.
ಸವಾಲೆಂದರೆ MCP ಪರಿಕರಗಳು ಟೋಕನ್ ಅಥೆಂಟಿಕೇಶನ್ ಅನ್ನು ಬಳಸುತ್ತವೆ. ಇದರರ್ಥ ಅವುಗಳಿಗೆ ಸಾಮಾನ್ಯ ವೆಬ್ ರಿಕ್ವೆಸ್ಟ್ನಲ್ಲಿರುವ ಸೆಷನ್ ಕಾನ್ಟೆಕ್ಸ್ (session context) ಇರುವುದಿಲ್ಲ. ನೀವು ಗ್ಲೋಬಲ್ ಟೆನೆಂಟ್ ಸ್ಕೋಪ್ (global tenant scope) ಮೇಲೆ ಅವಲಂಬಿತರಾದರೆ, ಸಿಸ್ಟಮ್ ಪ್ರತಿಯೊಂದು ಸಂಸ್ಥೆಯ ಡೇಟಾವನ್ನು ಹಿಂತಿರುಗಿಸಬಹುದು.
ನಾನು ಇದನ್ನು ಮೂರು ನಿಯಮಗಳ ಮೂಲಕ ಪರಿಹರಿಸಿದೆ:
- ಪ್ರತಿ ಕ್ವೆರಿಯಲ್ಲಿಯೂ ಸಂಸ್ಥೆಯ ಆಧಾರದ ಮೇಲೆ ಸ್ಪಷ್ಟವಾಗಿ ಫಿಲ್ಟರ್ ಮಾಡಿ. ಗ್ಲೋಬಲ್ ಸ್ಕೋಪ್ ಮೇಲೆ ಅವಲಂಬಿತರಾಗಬೇಡಿ.
- ವೆಬ್ ಆಪ್ನಂತೆಯೇ ಅದೇ ಪರ್ಮಿಷನ್ ಸ್ಟ್ರಿಂಗ್ಗಳನ್ನು ಬಳಸಿ. ಏಜೆಂಟ್ ಅನ್ನು ಬಳಸುವ ಮನುಷ್ಯನಿಗಿಂತ ಹೆಚ್ಚು ಅಧಿಕಾರ ಏಜೆಂಟ್ಗೆ ಎಂದಿಗೂ ಇರಬಾರದು.
- ಆಟೋ-ಇನ್ಕ್ರಿಮೆಂಟ್ ಐಡಿಗಳ ಬದಲಿಗೆ ಲುಕ್ಅಪ್ಗಳಿಗಾಗಿ UUIDಗಳನ್ನು ಬಳಸಿ.
ಪ್ರತಿಯೊಂದು ಪರಿಕರವನ್ನು ನಂಬಲಾಗದ ಎಂಡ್ಪಾಯಿಂಟ್ (untrusted endpoint) ಎಂದು ಪರಿಗಣಿಸಿ. ನಿಮ್ಮ ಲಾಜಿಕ್ ಅನ್ನು ಒಂದೇ ಸ್ಥಳದಲ್ಲಿ ಪರೀಕ್ಷಿಸಬಹುದಾದ ರೀತಿಯಲ್ಲಿ ಇರಿಸಿ.
ಎರಡನೇ ಕಾರ್ಯವು ಐಡೆಂಟಿಟಿ ಪೋರ್ಟಲ್ ಅನ್ನು ಒಳಗೊಂಡಿತ್ತು. ನಾನು LDAP ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಸ್ಟ್ಯಾಟಿಕ್ ಫೈಲ್ಗಳಿಂದ ಸೆಟ್ಟಿಂಗ್ಸ್ UI ಗೆ ವರ್ಗಾಯಿಸಿದೆ. ಅಡ್ಮಿನ್ಗಳು ಈಗ ಹೊಸ ಡಿಪ್ಲಾಯ್ಮೆಂಟ್ ಇಲ್ಲದೆಯೇ ಹೋಸ್ಟ್, ಪೋರ್ಟ್ ಮತ್ತು ಕ್ರೆಡೆನ್ಶಿಯಲ್ಗಳನ್ನು ಬದಲಾಯಿಸಬಹುದು.
ನಾನು ಕನೆಕ್ಷನ್ ಟೈಮೌಟ್ಗಳು ಮತ್ತು SASL ಆಯ್ಕೆಗಳ ಮೇಲೆ ನಿಯಂತ್ರಣವನ್ನೂ ಸೇರಿಸಿದೆ. ಇದು JSON ನೊಂದಿಗೆ ಒಂದು ತಾಂತ್ರಿಕ ಅಡಚಣೆಯನ್ನು ಸೃಷ್ಟಿಸಿತು.
ನೀವು JSON ನಲ್ಲಿ ಇಂಟೆಜರ್ ಕೀಗಳನ್ನು (integer keys) ಸಂಗ್ರಹಿಸಿದಾಗ, ಅವುಗಳನ್ನು ಡಿಕೋಡ್ ಮಾಡಿದಾಗ ಅವು ಸ್ಟ್ರಿಂಗ್ಗಳಾಗಿ ಹಿಂತಿರುಗುತ್ತವೆ. LDAP ಫಂಕ್ಷನ್ಗಳಿಗೆ ಇಂಟೆಜರ್ ಕೀಗಳು ಬೇಕಾಗುತ್ತವೆ. ಬಳಸುವ ಮೊದಲು ಆ ಕೀಗಳನ್ನು ಮತ್ತೆ ಇಂಟೆಜರ್ಗಳಾಗಿ ಪರಿವರ್ತಿಸಲು ನಾನು ಮ್ಯಾಪ್ಪರ್ (mapper) ಅನ್ನು ಬರೆಯಬೇಕಾಯಿತು.
ಇದನ್ನು ಸುರಕ್ಷಿತವಾಗಿಡಲು, ನಾನು ಎರಡು ಗಾರ್ಡ್ರೈಲ್ಸ್ಗಳನ್ನು ಸೇರಿಸಿದೆ:
- ಬೈಂಡ್ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿ ಇರಿಸಿ. ಸೀಕ್ರೆಟ್ಗಳನ್ನು ಎಂದಿಗೂ ಕ್ಯಾಶ್ನಲ್ಲಿ ಪ್ಲೇನ್ಟೆಕ್ಸ್ಟ್ ಆಗಿ ಇಡಬೇಡಿ.
- ಉಳಿಸುವ ಮೊದಲು JSON ಫೀಲ್ಡ್ಗಳನ್ನು ವ್ಯಾಲಿಡೇಟ್ ಮಾಡಿ. ತಪ್ಪಾದ ಕಾನ್ಫಿಗರೇಶನ್ ಉಳಿಸುವ ಹಂತದಲ್ಲೇ ವಿಫಲವಾಗಬೇಕು, ಬಳಕೆದಾರರು ಲಾಕ್ ಆಗುವಾಗ ಅಲ್ಲ.
ಕನೆಕ್ಷನ್ಗಳನ್ನು ಪರೀಕ್ಷಿಸಲು ಮತ್ತು ಉಳಿಸಲು ನಾನು ಒಂದೇ ಅಸೆಂಬ್ಲರ್ ಅನ್ನು ಬಳಸಿದೆ. ನೀವು ಪರೀಕ್ಷಿಸುವ ಕನೆಕ್ಷನ್ ನೀವು ಉಳಿಸುವ ಕನೆಕ್ಷನ್ ಆಗಿಯೇ ಇರುವುದನ್ನು ಇದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
ಎಂಜಿನಿಯರಿಂಗ್ ಎಂದರೆ ಕೇವಲ ಫೀಚರ್ ಅನ್ನು ನಿರ್ಮಿಸುವುದಲ್ಲ. ಎಂಜಿನಿಯರಿಂಗ್ ಎಂದರೆ ಗಾರ್ಡ್ರೈಲ್ಸ್ಗಳನ್ನು ನಿರ್ಮಿಸುವುದು.
ಮೂಲ: https://dev.to/nasrulhazim/dev-log-2026-06-24-agent-guardrails-and-runtime-ldap-config-2hi5
