[{"data":1,"prerenderedAt":914},["ShallowReactive",2],{"/blog/improve-ai-security-in-gitlab-with-composite-identities":3,"navigation-en-us":129,"banner-en-us":557,"footer-en-us":567,"blog-post-authors-en-us-Grzegorz Bizon":811,"blog-related-posts-en-us-improve-ai-security-in-gitlab-with-composite-identities":826,"blog-promotions-en-us":851,"next-steps-en-us":904},{"id":4,"title":5,"authors":6,"body":8,"category":108,"date":109,"description":110,"extension":111,"externalUrl":112,"faq":112,"featured":113,"heroImage":114,"meta":115,"navigation":116,"path":117,"seo":118,"slug":122,"stem":123,"tags":124,"template":127,"updatedDate":112,"__hash__":128},"blogPosts/en-us/blog/improve-ai-security-in-gitlab-with-composite-identities.md","Improve AI security in GitLab with composite identities",[7],"Grzegorz Bizon",{"type":9,"value":10,"toc":99},"minimark",[11,20,23,26,39,44,47,50,54,68,71,76,79,83,86,90],[12,13,14,15,19],"p",{},"Artificial intelligence (AI) is quickly becoming the backbone of modern software development, fueling developer efficiency and accelerating innovation. With the emergence of AI agents implementing code based on instructions from humans, we are learning that implementing AI-based features has its own unique set of security challenges. ",[16,17,18],"strong",{},"How do we protect access to the resources AI needs, protect confidentiality, and avoid privilege escalation","? Few organizations are ready to answer these questions today. At GitLab, we are. We are introducing a new paradigm for identity management: composite identities.",[12,21,22],{},"When AI agents are integrated into your DevSecOps workflows, previously simple questions become difficult to answer: Who authored this code? Who is the author of this merge request? Who created this Git commit? We found we had to start asking new questions: Who instructed an AI agent to generate this code? What context did AI need to build this feature? What were the resources AI had to access and read to generate the answer?",[12,24,25],{},"To answer these questions, we need to understand some fundamental aspects of AI’s identity:",[27,28,29,33,36],"ul",{},[30,31,32],"li",{},"Does an AI agent have its own distinct identity?",[30,34,35],{},"What is the representation of this identity?",[30,37,38],{},"How do we make it all secure?",[40,41,43],"h3",{"id":42},"authentication-and-ai-identity-management","Authentication and AI identity management",[12,45,46],{},"We are at the beginning of a paradigm shift in identity management in the software delivery lifecycle. Before the AI era, identity management was simpler. We had human user-based identities and machine-type identities using separate accounts.",[12,48,49],{},"With the emergence of AI and agentic workflows, the distinction between these two core types of identities has blurred. AI agents are supposed to work in an autonomous way, so it makes sense to think about them as machine-type accounts. On the other hand, AI agents are usually being instructed by human users, and require access to resources the human users have access to in order to complete their tasks. This introduces significant security risks — for example, the AI may provide human users with information they should not have access to. How do we avoid privilege escalation, provide auditability, and protect confidentiality in a world with AI agents?",[40,51,53],{"id":52},"the-solution-composite-identities","The solution: Composite identities",[12,55,56,57,63,64,67],{},"A composite identity is our new identity ",[58,59,62],"a",{"href":60,"rel":61},"https://cloud.google.com/iam/docs/overview#concepts_related_identity",[],"principal",", representing an AI agent’s identity that is linked with the identity of a human user who requests actions from the agent. ",[16,65,66],{},"This enhances our ability to protect resources stored in GitLab",". Whenever an AI agent with a composite identity attempts to access a resource, we will not only authenticate the agent itself, but also link its principal with a human user who is instructing the agent, and will try to authorize both principals before granting access to a resource. Both principals need access; otherwise, the access will be denied. If an AI agent by itself can access a project, but a human user who instructed the agent to do so cannot, GitLab will deny the access.",[12,69,70],{},"The inverse is true as well — if a human user can access a confidential issue, but an AI agent can’t, then its service account will not be able to read the issue. We authorize access to every API request and for each resource an agent attempts to access this way. Composite identity without a request-scoped link to a human account will not be authorized to access any resource. For fully autonomous workloads we are also considering adding support for linking composite identities with other principals.",[72,73,75],"h4",{"id":74},"composite-identity-and-service-accounts","Composite identity and service accounts",[12,77,78],{},"We redesigned our authorization framework to support composite identities, allowing multiple principals to be evaluated simultaneously when determining access rights to a resource. We enhanced our security infrastructure by implementing scoped identities across our entire system — from API requests to CI jobs and backend workers. These identities are linked to an AI agent's composite identity account also through OAuth tokens and CI job tokens. This project yielded unexpected security benefits, particularly in GitLab CI, where we upgraded job tokens to signed JSON web tokens (JWTs). Additionally, we contributed code to several open source libraries to add support for scoped identities.",[40,80,82],{"id":81},"composite-identity-with-gitlab-duo-with-amazon-q","Composite identity with GitLab Duo with Amazon Q",[12,84,85],{},"In the GitLab 17.8 release, we made composite identity for service accounts support available for customers through our GitLab Duo with Amazon Q integration. Amazon Q Developer agent will have composite identity enforced, which will protect your confidential GitLab resources from unauthorized access.",[40,87,89],{"id":88},"whats-next","What’s next?",[12,91,92,93,98],{},"To learn more, check out our ",[58,94,97],{"href":95,"rel":96},"https://docs.gitlab.com/development/ai_features/composite_identity/",[],"composite identity docs",".",{"title":100,"searchDepth":101,"depth":101,"links":102},"",2,[103,105,106,107],{"id":42,"depth":104,"text":43},3,{"id":52,"depth":104,"text":53},{"id":81,"depth":104,"text":82},{"id":88,"depth":104,"text":89},"security","2025-01-29","Learn how to implement AI features responsibly by applying authentication best practices with service accounts for AI agents in GitLab.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664638/Blog/Hero%20Images/applicationsecurity.png",{},true,"/en-us/blog/improve-ai-security-in-gitlab-with-composite-identities",{"title":5,"description":110,"ogTitle":5,"ogDescription":110,"noIndex":113,"ogImage":114,"ogUrl":119,"ogSiteName":120,"ogType":121,"canonicalUrls":119},"https://about.gitlab.com/blog/improve-ai-security-in-gitlab-with-composite-identities","https://about.gitlab.com","article","improve-ai-security-in-gitlab-with-composite-identities","en-us/blog/improve-ai-security-in-gitlab-with-composite-identities",[125,126,108],"AI","DevSecOps","BlogPost","8S5poyI8v2keGh75NJwsa9Ed_AAD7cg0sbLYbkBnSg4",{"logo":130,"freeTrial":135,"sales":140,"login":145,"items":150,"search":477,"minimal":508,"duo":527,"switchNav":536,"pricingDeployment":547},{"config":131},{"href":132,"dataGaName":133,"dataGaLocation":134},"/","gitlab logo","header",{"text":136,"config":137},"Get free trial",{"href":138,"dataGaName":139,"dataGaLocation":134},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":141,"config":142},"Request a demo",{"href":143,"dataGaName":144,"dataGaLocation":134},"/sales/?contact-topic=request-demo","sales",{"text":146,"config":147},"Sign in",{"href":148,"dataGaName":149,"dataGaLocation":134},"https://gitlab.com/users/sign_in/","sign in",[151,180,280,285,399,455],{"text":152,"config":153,"menu":155},"Platform",{"dataNavLevelOne":154},"platform",{"type":156,"columns":157},"cards",[158,164,172],{"title":152,"description":159,"link":160},"The intelligent orchestration platform for DevSecOps",{"text":161,"config":162},"Explore our Platform",{"href":163,"dataGaName":154,"dataGaLocation":134},"/platform/",{"title":165,"description":166,"link":167},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":168,"config":169},"Meet GitLab Duo",{"href":170,"dataGaName":171,"dataGaLocation":134},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":173,"description":174,"link":175},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":176,"config":177},"Learn more",{"href":178,"dataGaName":179,"dataGaLocation":134},"/why-gitlab/","why gitlab",{"text":181,"left":116,"config":182,"menu":184},"Product",{"dataNavLevelOne":183},"solutions",{"type":185,"link":186,"columns":190,"feature":259},"lists",{"text":187,"config":188},"View all Solutions",{"href":189,"dataGaName":183,"dataGaLocation":134},"/solutions/",[191,215,238],{"title":192,"description":193,"link":194,"items":199},"Automation","CI/CD and automation to accelerate deployment",{"config":195},{"icon":196,"href":197,"dataGaName":198,"dataGaLocation":134},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[200,204,207,211],{"text":201,"config":202},"CI/CD",{"href":203,"dataGaLocation":134,"dataGaName":201},"/solutions/continuous-integration/",{"text":165,"config":205},{"href":170,"dataGaLocation":134,"dataGaName":206},"gitlab duo agent platform - product menu",{"text":208,"config":209},"Source Code Management",{"href":210,"dataGaLocation":134,"dataGaName":208},"/solutions/source-code-management/",{"text":212,"config":213},"Automated Software Delivery",{"href":197,"dataGaLocation":134,"dataGaName":214},"Automated software delivery",{"title":216,"description":217,"link":218,"items":223},"Security","Deliver code faster without compromising security",{"config":219},{"href":220,"dataGaName":221,"dataGaLocation":134,"icon":222},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[224,228,233],{"text":225,"config":226},"Application Security Testing",{"href":220,"dataGaName":227,"dataGaLocation":134},"Application security testing",{"text":229,"config":230},"Software Supply Chain Security",{"href":231,"dataGaLocation":134,"dataGaName":232},"/solutions/supply-chain/","Software supply chain security",{"text":234,"config":235},"Software Compliance",{"href":236,"dataGaName":237,"dataGaLocation":134},"/solutions/software-compliance/","software compliance",{"title":239,"link":240,"items":245},"Measurement",{"config":241},{"icon":242,"href":243,"dataGaName":244,"dataGaLocation":134},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[246,250,254],{"text":247,"config":248},"Visibility & Measurement",{"href":243,"dataGaLocation":134,"dataGaName":249},"Visibility and Measurement",{"text":251,"config":252},"Value Stream Management",{"href":253,"dataGaLocation":134,"dataGaName":251},"/solutions/value-stream-management/",{"text":255,"config":256},"Analytics & Insights",{"href":257,"dataGaLocation":134,"dataGaName":258},"/solutions/analytics-and-insights/","Analytics and insights",{"title":260,"type":185,"items":261},"GitLab for",[262,268,274],{"text":263,"config":264},"Enterprise",{"icon":265,"href":266,"dataGaLocation":134,"dataGaName":267},"Building","/enterprise/","enterprise",{"text":269,"config":270},"Small Business",{"icon":271,"href":272,"dataGaLocation":134,"dataGaName":273},"Work","/small-business/","small business",{"text":275,"config":276},"Public Sector",{"icon":277,"href":278,"dataGaLocation":134,"dataGaName":279},"Organization","/solutions/public-sector/","public sector",{"text":281,"config":282},"Pricing",{"href":283,"dataGaName":284,"dataGaLocation":134,"dataNavLevelOne":284},"/pricing/","pricing",{"text":286,"config":287,"menu":289},"Resources",{"dataNavLevelOne":288},"resources",{"type":185,"link":290,"columns":294,"feature":388},{"text":291,"config":292},"View all resources",{"href":293,"dataGaName":288,"dataGaLocation":134},"/resources/",[295,328,355],{"title":296,"items":297},"Getting started",[298,303,308,313,318,323],{"text":299,"config":300},"Install",{"href":301,"dataGaName":302,"dataGaLocation":134},"/install/","install",{"text":304,"config":305},"Quick start guides",{"href":306,"dataGaName":307,"dataGaLocation":134},"/get-started/","quick setup checklists",{"text":309,"config":310},"Learn",{"href":311,"dataGaLocation":134,"dataGaName":312},"https://university.gitlab.com/","learn",{"text":314,"config":315},"Product documentation",{"href":316,"dataGaName":317,"dataGaLocation":134},"https://docs.gitlab.com/","product documentation",{"text":319,"config":320},"Best practice videos",{"href":321,"dataGaName":322,"dataGaLocation":134},"/getting-started-videos/","best practice videos",{"text":324,"config":325},"Integrations",{"href":326,"dataGaName":327,"dataGaLocation":134},"/integrations/","integrations",{"title":329,"items":330},"Discover",[331,336,341,346,350],{"text":332,"config":333},"Customer success stories",{"href":334,"dataGaName":335,"dataGaLocation":134},"/customers/","customer success stories",{"text":337,"config":338},"Blog",{"href":339,"dataGaName":340,"dataGaLocation":134},"/blog/","blog",{"text":342,"config":343},"Demo Hub",{"href":344,"dataGaName":345,"dataGaLocation":134},"/demo-hub/","demo hub",{"text":347,"config":348},"The Source",{"href":349,"dataGaName":340,"dataGaLocation":134},"/the-source/",{"text":351,"config":352},"Remote",{"href":353,"dataGaName":354,"dataGaLocation":134},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":356,"items":357},"Connect",[358,363,368,373,378,383],{"text":359,"config":360},"GitLab Services",{"href":361,"dataGaName":362,"dataGaLocation":134},"/services/","services",{"text":364,"config":365},"Contribute",{"href":366,"dataGaName":367,"dataGaLocation":134},"https://contributors.gitlab.com","contribute",{"text":369,"config":370},"Community",{"href":371,"dataGaName":372,"dataGaLocation":134},"/community/","community",{"text":374,"config":375},"Forum",{"href":376,"dataGaName":377,"dataGaLocation":134},"https://forum.gitlab.com/","forum",{"text":379,"config":380},"Events",{"href":381,"dataGaName":382,"dataGaLocation":134},"/events/","events",{"text":384,"config":385},"Partners",{"href":386,"dataGaName":387,"dataGaLocation":134},"/partners/","partners",{"config":389,"title":392,"text":393,"link":394},{"background":390,"textColor":391},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":395,"config":396},"Read the latest",{"href":397,"dataGaName":398,"dataGaLocation":134},"/whats-new/","whats new",{"text":400,"config":401,"menu":403},"Company",{"dataNavLevelOne":402},"company",{"type":185,"columns":404},[405],{"items":406},[407,412,418,420,425,430,435,440,445,450],{"text":408,"config":409},"About",{"href":410,"dataGaName":411,"dataGaLocation":134},"/company/","about",{"text":413,"config":414,"footerGa":417},"Jobs",{"href":415,"dataGaName":416,"dataGaLocation":134},"/jobs/","jobs",{"dataGaName":416},{"text":379,"config":419},{"href":381,"dataGaName":382,"dataGaLocation":134},{"text":421,"config":422},"Leadership",{"href":423,"dataGaName":424,"dataGaLocation":134},"/company/team/e-group/","leadership",{"text":426,"config":427},"Handbook",{"href":428,"dataGaName":429,"dataGaLocation":134},"https://handbook.gitlab.com/","handbook",{"text":431,"config":432},"Investor relations",{"href":433,"dataGaName":434,"dataGaLocation":134},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":436,"config":437},"Trust Center",{"href":438,"dataGaName":439,"dataGaLocation":134},"/security/","trust center",{"text":441,"config":442},"AI Transparency Center",{"href":443,"dataGaName":444,"dataGaLocation":134},"/ai-transparency-center/","ai transparency center",{"text":446,"config":447},"Newsletter",{"href":448,"dataGaName":449,"dataGaLocation":134},"/company/contact/#contact-forms","newsletter",{"text":451,"config":452},"Press",{"href":453,"dataGaName":454,"dataGaLocation":134},"/press/","press",{"text":456,"config":457,"menu":458},"Contact us",{"dataNavLevelOne":402},{"type":185,"columns":459},[460],{"items":461},[462,467,472],{"text":463,"config":464},"Talk to sales",{"href":465,"dataGaName":466,"dataGaLocation":134},"/sales/","talk to sales",{"text":468,"config":469},"Support portal",{"href":470,"dataGaName":471,"dataGaLocation":134},"https://support.gitlab.com/hc/en-us","support portal",{"text":473,"config":474},"Customer portal",{"href":475,"dataGaName":476,"dataGaLocation":134},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":478,"login":479,"suggestions":486},"Close",{"text":480,"link":481},"To search repositories and projects, login to",{"text":482,"config":483},"gitlab.com",{"href":148,"dataGaName":484,"dataGaLocation":485},"search login","search",{"text":487,"default":488},"Suggestions",[489,491,495,497,501,505],{"text":165,"config":490},{"href":170,"dataGaName":165,"dataGaLocation":485},{"text":492,"config":493},"Code Suggestions (AI)",{"href":494,"dataGaName":492,"dataGaLocation":485},"/solutions/code-suggestions/",{"text":201,"config":496},{"href":203,"dataGaName":201,"dataGaLocation":485},{"text":498,"config":499},"GitLab on AWS",{"href":500,"dataGaName":498,"dataGaLocation":485},"/partners/technology-partners/aws/",{"text":502,"config":503},"GitLab on Google Cloud",{"href":504,"dataGaName":502,"dataGaLocation":485},"/partners/technology-partners/google-cloud-platform/",{"text":506,"config":507},"Why GitLab?",{"href":178,"dataGaName":506,"dataGaLocation":485},{"freeTrial":509,"mobileIcon":514,"desktopIcon":519,"secondaryButton":522},{"text":510,"config":511},"Start free trial",{"href":512,"dataGaName":139,"dataGaLocation":513},"https://gitlab.com/-/trials/new/","nav",{"altText":515,"config":516},"Gitlab Icon",{"src":517,"dataGaName":518,"dataGaLocation":513},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":515,"config":520},{"src":521,"dataGaName":518,"dataGaLocation":513},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":523,"config":524},"Get Started",{"href":525,"dataGaName":526,"dataGaLocation":513},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":528,"mobileIcon":532,"desktopIcon":534},{"text":529,"config":530},"Learn more about GitLab Duo",{"href":170,"dataGaName":531,"dataGaLocation":513},"gitlab duo",{"altText":515,"config":533},{"src":517,"dataGaName":518,"dataGaLocation":513},{"altText":515,"config":535},{"src":521,"dataGaName":518,"dataGaLocation":513},{"button":537,"mobileIcon":542,"desktopIcon":544},{"text":538,"config":539},"/switch",{"href":540,"dataGaName":541,"dataGaLocation":513},"#contact","switch",{"altText":515,"config":543},{"src":517,"dataGaName":518,"dataGaLocation":513},{"altText":515,"config":545},{"src":546,"dataGaName":518,"dataGaLocation":513},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":548,"mobileIcon":553,"desktopIcon":555},{"text":549,"config":550},"Back to pricing",{"href":283,"dataGaName":551,"dataGaLocation":513,"icon":552},"back to pricing","GoBack",{"altText":515,"config":554},{"src":517,"dataGaName":518,"dataGaLocation":513},{"altText":515,"config":556},{"src":521,"dataGaName":518,"dataGaLocation":513},{"title":558,"titleMobile":559,"button":560,"config":565},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":176,"config":561},{"href":562,"dataGaName":563,"dataGaLocation":564},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":566,"disabled":113},"release",{"data":568},{"text":569,"source":570,"edit":576,"contribute":581,"config":586,"items":591,"minimal":800},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":571,"config":572},"View page source",{"href":573,"dataGaName":574,"dataGaLocation":575},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":577,"config":578},"Edit this page",{"href":579,"dataGaName":580,"dataGaLocation":575},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":582,"config":583},"Please contribute",{"href":584,"dataGaName":585,"dataGaLocation":575},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":587,"facebook":588,"youtube":589,"linkedin":590},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[592,639,692,736,768],{"title":281,"links":593,"subMenu":608},[594,598,603],{"text":595,"config":596},"View plans",{"href":283,"dataGaName":597,"dataGaLocation":575},"view plans",{"text":599,"config":600},"Why Premium?",{"href":601,"dataGaName":602,"dataGaLocation":575},"/pricing/premium/","why premium",{"text":604,"config":605},"Why Ultimate?",{"href":606,"dataGaName":607,"dataGaLocation":575},"/pricing/ultimate/","why ultimate",[609],{"title":610,"links":611},"Contact Us",[612,615,617,619,624,629,634],{"text":613,"config":614},"Contact sales",{"href":465,"dataGaName":144,"dataGaLocation":575},{"text":468,"config":616},{"href":470,"dataGaName":471,"dataGaLocation":575},{"text":473,"config":618},{"href":475,"dataGaName":476,"dataGaLocation":575},{"text":620,"config":621},"Status",{"href":622,"dataGaName":623,"dataGaLocation":575},"https://status.gitlab.com/","status",{"text":625,"config":626},"Terms of use",{"href":627,"dataGaName":628,"dataGaLocation":575},"/terms/","terms of use",{"text":630,"config":631},"Privacy statement",{"href":632,"dataGaName":633,"dataGaLocation":575},"/privacy/","privacy statement",{"text":635,"config":636},"Cookie preferences",{"dataGaName":637,"dataGaLocation":575,"id":638,"isOneTrustButton":116},"cookie preferences","ot-sdk-btn",{"title":181,"links":640,"subMenu":649},[641,645],{"text":642,"config":643},"DevSecOps platform",{"href":163,"dataGaName":644,"dataGaLocation":575},"devsecops platform",{"text":646,"config":647},"AI-Assisted Development",{"href":170,"dataGaName":648,"dataGaLocation":575},"ai-assisted development",[650],{"title":651,"links":652},"Topics",[653,658,663,668,673,677,682,687],{"text":654,"config":655},"CICD",{"href":656,"dataGaName":657,"dataGaLocation":575},"/topics/ci-cd/","cicd",{"text":659,"config":660},"GitOps",{"href":661,"dataGaName":662,"dataGaLocation":575},"/topics/gitops/","gitops",{"text":664,"config":665},"DevOps",{"href":666,"dataGaName":667,"dataGaLocation":575},"/topics/devops/","devops",{"text":669,"config":670},"Version Control",{"href":671,"dataGaName":672,"dataGaLocation":575},"/topics/version-control/","version control",{"text":126,"config":674},{"href":675,"dataGaName":676,"dataGaLocation":575},"/topics/devsecops/","devsecops",{"text":678,"config":679},"Cloud Native",{"href":680,"dataGaName":681,"dataGaLocation":575},"/topics/cloud-native/","cloud native",{"text":683,"config":684},"AI for Coding",{"href":685,"dataGaName":686,"dataGaLocation":575},"/topics/devops/ai-for-coding/","ai for coding",{"text":688,"config":689},"Agentic AI",{"href":690,"dataGaName":691,"dataGaLocation":575},"/topics/agentic-ai/","agentic ai",{"title":693,"links":694},"Solutions",[695,697,699,704,708,711,715,718,720,723,726,731],{"text":225,"config":696},{"href":220,"dataGaName":225,"dataGaLocation":575},{"text":214,"config":698},{"href":197,"dataGaName":198,"dataGaLocation":575},{"text":700,"config":701},"Agile development",{"href":702,"dataGaName":703,"dataGaLocation":575},"/solutions/agile-delivery/","agile delivery",{"text":705,"config":706},"SCM",{"href":210,"dataGaName":707,"dataGaLocation":575},"source code management",{"text":654,"config":709},{"href":203,"dataGaName":710,"dataGaLocation":575},"continuous integration & delivery",{"text":712,"config":713},"Value stream management",{"href":253,"dataGaName":714,"dataGaLocation":575},"value stream management",{"text":659,"config":716},{"href":717,"dataGaName":662,"dataGaLocation":575},"/solutions/gitops/",{"text":263,"config":719},{"href":266,"dataGaName":267,"dataGaLocation":575},{"text":721,"config":722},"Small business",{"href":272,"dataGaName":273,"dataGaLocation":575},{"text":724,"config":725},"Public sector",{"href":278,"dataGaName":279,"dataGaLocation":575},{"text":727,"config":728},"Education",{"href":729,"dataGaName":730,"dataGaLocation":575},"/solutions/education/","education",{"text":732,"config":733},"Financial services",{"href":734,"dataGaName":735,"dataGaLocation":575},"/solutions/finance/","financial services",{"title":286,"links":737},[738,740,742,744,747,749,752,754,756,758,760,762,764,766],{"text":299,"config":739},{"href":301,"dataGaName":302,"dataGaLocation":575},{"text":304,"config":741},{"href":306,"dataGaName":307,"dataGaLocation":575},{"text":309,"config":743},{"href":311,"dataGaName":312,"dataGaLocation":575},{"text":314,"config":745},{"href":316,"dataGaName":746,"dataGaLocation":575},"docs",{"text":337,"config":748},{"href":339,"dataGaName":340,"dataGaLocation":575},{"text":750,"config":751},"What's new",{"href":397,"dataGaName":398,"dataGaLocation":575},{"text":332,"config":753},{"href":334,"dataGaName":335,"dataGaLocation":575},{"text":351,"config":755},{"href":353,"dataGaName":354,"dataGaLocation":575},{"text":359,"config":757},{"href":361,"dataGaName":362,"dataGaLocation":575},{"text":364,"config":759},{"href":366,"dataGaName":367,"dataGaLocation":575},{"text":369,"config":761},{"href":371,"dataGaName":372,"dataGaLocation":575},{"text":374,"config":763},{"href":376,"dataGaName":377,"dataGaLocation":575},{"text":379,"config":765},{"href":381,"dataGaName":382,"dataGaLocation":575},{"text":384,"config":767},{"href":386,"dataGaName":387,"dataGaLocation":575},{"title":400,"links":769},[770,772,774,776,778,780,784,789,791,793,795],{"text":408,"config":771},{"href":410,"dataGaName":402,"dataGaLocation":575},{"text":413,"config":773},{"href":415,"dataGaName":416,"dataGaLocation":575},{"text":421,"config":775},{"href":423,"dataGaName":424,"dataGaLocation":575},{"text":426,"config":777},{"href":428,"dataGaName":429,"dataGaLocation":575},{"text":431,"config":779},{"href":433,"dataGaName":434,"dataGaLocation":575},{"text":781,"config":782},"Sustainability",{"href":783,"dataGaName":781,"dataGaLocation":575},"/sustainability/",{"text":785,"config":786},"Diversity, inclusion and belonging (DIB)",{"href":787,"dataGaName":788,"dataGaLocation":575},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":436,"config":790},{"href":438,"dataGaName":439,"dataGaLocation":575},{"text":446,"config":792},{"href":448,"dataGaName":449,"dataGaLocation":575},{"text":451,"config":794},{"href":453,"dataGaName":454,"dataGaLocation":575},{"text":796,"config":797},"Modern Slavery Transparency Statement",{"href":798,"dataGaName":799,"dataGaLocation":575},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":801},[802,805,808],{"text":803,"config":804},"Terms",{"href":627,"dataGaName":628,"dataGaLocation":575},{"text":806,"config":807},"Cookies",{"dataGaName":637,"dataGaLocation":575,"id":638,"isOneTrustButton":116},{"text":809,"config":810},"Privacy",{"href":632,"dataGaName":633,"dataGaLocation":575},[812],{"id":813,"title":7,"body":112,"config":814,"content":816,"description":112,"extension":820,"meta":821,"navigation":116,"path":822,"seo":823,"stem":824,"__hash__":825},"blogAuthors/en-us/blog/authors/grzegorz-bizon.yml",{"template":815},"BlogAuthor",{"name":7,"config":817},{"headshot":818,"ctfId":819},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Grzegorz-Bizon","yml",{},"/en-us/blog/authors/grzegorz-bizon",{},"en-us/blog/authors/grzegorz-bizon","Z1aKSWxubaVpieVMM-H8afTapWLnKt0xl0AyT32DmJE",[827,835,843],{"title":828,"description":829,"heroImage":830,"category":108,"date":831,"authors":832,"slug":834,"externalUrl":112},"How GitLab tracks vulnerabilities through refactors and reformatting","Learn how GitLab's improved Scope+Offset fingerprinting keeps vulnerability tracking stable across comments, blank lines, and reformatting.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1759320418/xjmqcozxzt4frx0hori3.png","2026-08-12",[833],"Julian Thome","improved-scope-offset-fingerprinting",{"title":836,"description":837,"heroImage":830,"category":108,"date":838,"authors":839,"slug":842,"externalUrl":112},"GitLab Secrets Manager adds ESO, Terraform, API support","Simplify credential management across your stack. GitLab Secrets Manager provides secure retrieval in Kubernetes, Terraform, and external workflows.","2026-08-06",[840,841],"Erick Bajao","Joe Randazzo","gitlab-secrets-manager-add-eso-terraform-api-support",{"title":844,"description":845,"heroImage":846,"category":108,"date":847,"authors":848,"slug":850,"externalUrl":112},"Secure every commit to production with Claude and GitLab","Claude Security catches vulnerabilities inside a coding session. GitLab picks up from there, scanning, enforcing policy, and producing audit evidence for the software lifecycle. ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756122536/akivvcnafog9c4dhhzkp.png","2026-08-03",[849],"Alisa Ho","claude-security-and-gitlab",{"promotions":852},[853,867,879,890],{"id":854,"categories":855,"header":857,"text":858,"button":859,"image":864},"ai-modernization",[856],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":860,"config":861},"Get your AI maturity score",{"href":862,"dataGaName":863,"dataGaLocation":340},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":865},{"src":866},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":868,"categories":869,"header":871,"text":858,"button":872,"image":876},"devops-modernization",[870,676],"product","Are you just managing tools or shipping innovation?",{"text":873,"config":874},"Get your DevOps maturity score",{"href":875,"dataGaName":863,"dataGaLocation":340},"/assessments/devops-modernization-assessment/",{"config":877},{"src":878},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":880,"categories":881,"header":882,"text":858,"button":883,"image":887},"security-modernization",[108],"Are you trading speed for security?",{"text":884,"config":885},"Get your security maturity score",{"href":886,"dataGaName":863,"dataGaLocation":340},"/assessments/security-modernization-assessment/",{"config":888},{"src":889},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":891,"paths":892,"header":895,"text":896,"button":897,"image":902},"github-azure-migration",[893,894],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":898,"config":899},"See how GitLab compares to GitHub",{"href":900,"dataGaName":901,"dataGaLocation":340},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":903},{"src":878},{"header":905,"blurb":906,"button":907,"secondaryButton":912},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":908,"config":909},"Get your free trial",{"href":910,"dataGaName":139,"dataGaLocation":911},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":613,"config":913},{"href":465,"dataGaName":144,"dataGaLocation":911},1786803752273]