[{"data":1,"prerenderedAt":1525},["ShallowReactive",2],{"/blog/get-to-know-the-security-and-governance-updates-in-gitlab-17-17-1":3,"navigation-en-us":741,"banner-en-us":1169,"footer-en-us":1179,"blog-post-authors-en-us-Fernando Diaz":1423,"blog-related-posts-en-us-get-to-know-the-security-and-governance-updates-in-gitlab-17-17-1":1438,"blog-promotions-en-us":1463,"next-steps-en-us":1515},{"id":4,"title":5,"authors":6,"body":8,"category":718,"date":719,"description":720,"extension":721,"externalUrl":722,"faq":722,"featured":723,"heroImage":724,"meta":725,"navigation":723,"path":726,"seo":727,"slug":732,"stem":733,"tags":734,"template":739,"updatedDate":722,"__hash__":740},"blogPosts/en-us/blog/get-to-know-the-security-and-governance-updates-in-gitlab-17-17-1.md","Get to know the security and governance updates in GitLab 17, 17.1",[7],"Fernando Diaz",{"type":9,"value":10,"toc":709},"minimark",[11,28,31,71,75,84,93,113,122,125,138,141,144,153,172,229,238,240,246,257,260,275,282,297,299,305,314,340,348,351,354,362,386,395,401,410,421,434,436,442,445,454,484,490,505,517,522,524,530,533,548,563,577,591,602,604,610,614,617,659,662,705],[12,13,14,15,21,22,27],"p",{},"With every GitLab release we enhance and optimize security and governance solutions to ensure customers have the tools they need to produce secure and compliant software. Our values of ",[16,17,20],"a",{"href":18,"rel":19},"https://handbook.gitlab.com/handbook/values/#iteration",[],"iteration"," and ",[16,23,26],{"href":24,"rel":25},"https://handbook.gitlab.com/handbook/values/#results",[],"results for customers"," drive our release cycles, and GitLab 17 is no exception. We have been releasing every month for the past 153 months straight!",[12,29,30],{},"In this article, you'll learn my favorite security and governance enhancements released in GitLab 17 and 17.1 and how they can benefit your organization’s security requirements.",[32,33,34,41,47,53,59,65],"ul",{},[35,36,37],"li",{},[16,38,40],{"href":39},"#sast-analyzer-streamlining","SAST analyzer streamlining",[35,42,43],{},[16,44,46],{"href":45},"#android-dependency-scanning","Android dependency scanning",[35,48,49],{},[16,50,52],{"href":51},"#custom-roles-and-granular-security-permissions-updates","Custom roles and granular security permissions updates",[35,54,55],{},[16,56,58],{"href":57},"#secret-detection-updates","Secret detection updates",[35,60,61],{},[16,62,64],{"href":63},"#container-registry-updates","Container registry updates",[35,66,67],{},[16,68,70],{"href":69},"#api-security-scanning-updates","API security scanning updates",[72,73,40],"h2",{"id":74},"sast-analyzer-streamlining",[12,76,77,78,83],{},"GitLab provides static application security testing (",[16,79,82],{"href":80,"rel":81},"https://docs.gitlab.com/user/application_security/sast/",[],"SAST",") to examine your source code for known vulnerabilities, detecting vulnerabilities such as SQL injections and cross-site scripting. When SAST kicks off, the programming language used is auto-detected and the appropriate scanner is loaded.",[12,85,86,87,92],{},"In GitLab 17, SAST scans the same languages, but now with fewer analyzers, ",[16,88,91],{"href":89,"rel":90},"https://docs.gitlab.com/releases/17/gitlab-17-0-released/#streamlined-sast-analyzer-coverage-for-more-languages",[],"offering a simpler and more customizable experience",". Language-specific analyzers have been replaced with GitLab-managed rules in the Semgrep-based analyzer for the following languages:",[32,94,95,98,101,104,107,110],{},[35,96,97],{},"C/C++",[35,99,100],{},"Swift (iOS)",[35,102,103],{},"Java/Kotlin (Android)",[35,105,106],{},"Node.js",[35,108,109],{},"PHP",[35,111,112],{},"Ruby",[12,114,115,116,121],{},"Having one analyzer for many different languages makes configurations and writing rules easier than ever. See the ",[16,117,120],{"href":118,"rel":119},"https://docs.gitlab.com/user/application_security/sast/#supported-languages-and-frameworks",[],"supported languages and frameworks documentation"," for more information.",[12,123,124],{},"Watch this video to learn more:",[126,127,130,131],"figure",{"className":128},[129],"video_container","\n  ",[132,133,137],"iframe",{"src":134,"frameBorder":135,"allowFullScreen":136},"https://www.youtube.com/embed/_80z6mZmzek?si=i9yPQttxuwVcb7Ye","0","true"," ",[72,139,46],{"id":140},"android-dependency-scanning",[12,142,143],{},"In modern software development, many applications are built from multiple dependencies that are best at performing their intended function. For example, rather than writing a YAML parser, a developer will use a library that parses YAML. This allows developers to focus on the main goal of their application, rather than spending time on utility functions.",[12,145,146,147,152],{},"While the use of dependencies speeds up efficiency, they can be difficult to manage and could introduce vulnerabilities to your application. For this, GitLab provides ",[16,148,151],{"href":149,"rel":150},"https://docs.gitlab.com/user/application_security/dependency_scanning/",[],"dependency scanning",", which analyzes dependencies for known vulnerabilities.",[12,154,155,156,160,161,166,167,171],{},"Many organizations are using dependencies even when creating native mobile applications. In GitLab 17, we introduced ",[16,157,46],{"href":158,"rel":159},"https://docs.gitlab.com/releases/17/gitlab-17-0-released/#dependency-scanning-support-for-android",[]," to bridge the gap. Android dependency scanning can be easily added as a ",[16,162,165],{"href":163,"rel":164},"https://gitlab.com/explore/catalog/components/android-dependency-scanning",[],"CI/CD catalog component"," – just include the following code in your ",[168,169,170],"code",{},".gitlab-ci.yml",":",[173,174,179],"pre",{"className":175,"code":176,"language":177,"meta":178,"style":178},"language-yaml shiki shiki-themes github-light","include:\n  - component: gitlab.com/components/android-dependency-scanning/component@1.0.0\n    inputs:\n      stage: test\n\n","yaml","",[168,180,181,194,210,218],{"__ignoreMap":178},[182,183,186,190],"span",{"class":184,"line":185},"line",1,[182,187,189],{"class":188},"shJU0","include",[182,191,193],{"class":192},"sgsFI",":\n",[182,195,197,200,203,206],{"class":184,"line":196},2,[182,198,199],{"class":192},"  - ",[182,201,202],{"class":188},"component",[182,204,205],{"class":192},": ",[182,207,209],{"class":208},"sYBdl","gitlab.com/components/android-dependency-scanning/component@1.0.0\n",[182,211,213,216],{"class":184,"line":212},3,[182,214,215],{"class":188},"    inputs",[182,217,193],{"class":192},[182,219,221,224,226],{"class":184,"line":220},4,[182,222,223],{"class":188},"      stage",[182,225,205],{"class":192},[182,227,228],{"class":208},"test\n",[12,230,231,232,237],{},"This job will also generate a CycloneDX software bill of materials (",[16,233,236],{"href":234,"rel":235},"https://about.gitlab.com/blog/the-ultimate-guide-to-sboms/",[],"SBOM",") report, which may be necessary for compliance. Make sure to scan your Android dependencies as soon as possible, as there are many CVEs out there.",[12,239,124],{},[126,241,130,243],{"className":242},[129],[132,244,137],{"src":245,"frameBorder":135,"allowFullScreen":136},"https://www.youtube.com/embed/_80z6mZmzek?si=DdB7j4NAenl-UcrJ",[247,248,249],"blockquote",{},[12,250,251,252,256],{},"Learn more SBOMs and dependencies with ",[16,253,255],{"href":234,"rel":254},[],"our ultimate guide to SBOMs",".",[72,258,52],{"id":259},"custom-roles-and-granular-security-permissions-updates",[12,261,262,263,268,269,274],{},"GitLab provides ",[16,264,267],{"href":265,"rel":266},"https://docs.gitlab.com/user/custom_roles/",[],"custom roles"," to allow organizations to create user roles with the precise privileges and permissions to meet their needs. This enables organizations to ",[16,270,273],{"href":271,"rel":272},"https://about.gitlab.com/blog/the-ultimate-guide-to-least-privilege-access-with-gitlab/",[],"implement the principle of least privilege"," to adhere to various compliance standards.",[12,276,277],{},[278,279],"img",{"alt":280,"src":281},"custom roles screenshot","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098874/Blog/Content%20Images/Blog/Content%20Images/1_aHR0cHM6_1750098873857.png",[12,283,284,285,290,291,296],{},"In GitLab 17, managing custom roles has become easier than ever. You can now ",[16,286,289],{"href":287,"rel":288},"https://docs.gitlab.com/releases/17/gitlab-17-0-released/#edit-a-custom-role-and-its-permissions",[],"edit a custom role and its permissions directly from the UI",", whereas, in the past, the role needed to be recreated. Also, for those using GitLab self-managed, ",[16,292,295],{"href":293,"rel":294},"https://docs.gitlab.com/releases/17/gitlab-17-0-released/#manage-custom-roles-at-self-managed-instance-level",[],"custom roles are now managed at the instance level",", allowing administrators to create the roles, and group owners to assign them.",[12,298,124],{},[126,300,130,302],{"className":301},[129],[132,303,137],{"src":304,"frameBorder":135,"allowFullScreen":136},"https://www.youtube.com/embed/glvvCoc2hkc?si=dl_SwQ7tyVdzirH5",[12,306,307,308,313],{},"There have also been ",[16,309,312],{"href":310,"rel":311},"https://docs.gitlab.com/releases/17/gitlab-17-0-released/#ux-improvements-to-custom-roles",[],"several UX improvements"," added to this feature along with the introduction of the following permissions:",[32,315,316,319,322,325,328,331,334,337],{},[35,317,318],{},"assign security policy links",[35,320,321],{},"manage and assign compliance frameworks",[35,323,324],{},"manage webhooks",[35,326,327],{},"manage push rules",[35,329,330],{},"manage merge request settings (17.1)",[35,332,333],{},"manage integrations (17.1)",[35,335,336],{},"manage deploy tokens (17.1)",[35,338,339],{},"read CRM contacts (17.1)",[12,341,342,343,256],{},"GitLab releases usually include new permissions to further enable the implementation of the principle of least privilege. To learn more about the available granular security permissions, ",[16,344,347],{"href":345,"rel":346},"https://docs.gitlab.com/user/custom_roles/abilities/",[],"visit the available custom permission documentation",[72,349,58],{"id":350},"secret-detection-updates",[12,352,353],{},"Developers may accidentally commit secrets like keys or API tokens to Git repositories from time to time. After a sensitive value is pushed to a remote repository, anyone with access to the repository can impersonate the authorized user of the secret and cause mayhem. When this occurs the exposed secrets must be revoked and replaced to address this risk, which can cause system downtime.",[12,355,262,356,361],{},[16,357,360],{"href":358,"rel":359},"https://docs.gitlab.com/user/application_security/secret_detection/",[],"secret detection"," to address this risk, and in GitLab 17 it’s gotten even better with the following enhancements:",[32,363,364,378],{},[35,365,366,371,372,377],{},[16,367,370],{"href":368,"rel":369},"https://docs.gitlab.com/releases/17/gitlab-17-0-released/#secret-detection-now-supports-remote-rulesets-when-overriding-or-disabling-rules",[],"Support for remote rulesets when overriding or disabling rules",": - Allows you to override or disable rules via a remote configuration. Therefore, you can scale rule configurations across multiple projects using only one ",[16,373,376],{"href":374,"rel":375},"https://toml.io/en/",[],"TOML"," file.",[35,379,380,385],{},[16,381,384],{"href":382,"rel":383},"https://docs.gitlab.com/releases/17/gitlab-17-0-released/#introducing-advanced-vulnerability-tracking-for-secret-detection",[],"Advanced vulnerability tracking",": Detects when the same secret has moved within a file due to refactoring or unrelated changes. This leads to reduced duplicate findings, simplifying vulnerability management.",[12,387,388,389,394],{},"In GitLab 17.1, ",[16,390,393],{"href":391,"rel":392},"https://docs.gitlab.com/releases/17/gitlab-17-1-released/#secret-push-protection-available-in-beta",[],"secret push protection"," is now in Beta. Secret push protection checks the content of each commit pushed to GitLab. If any secrets are detected, the push is blocked and displays information about the commit. Therefore, a developer does not need to do the extra work of removing and rotating secrets, since they are never committed upstream.",[12,396,397],{},[278,398],{"alt":399,"src":400},"Push block eue to detected secret","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098874/Blog/Content%20Images/Blog/Content%20Images/2_aHR0cHM6_1750098873858.png",[12,402,403,404,409],{},"When ",[16,405,408],{"href":406,"rel":407},"https://about.gitlab.com/blog/prevent-secret-leaks-in-source-code-with-gitlab-secret-push-protection/",[],"push protection occurs",", you can see it displays additional information on the commit, including:",[32,411,412,415,418],{},[35,413,414],{},"the commit ID that contains the secret",[35,416,417],{},"the filename and line number that contains the secret",[35,419,420],{},"the type of secret",[12,422,423,427,428,433],{},[424,425,426],"strong",{},"Note:","  ",[16,429,432],{"href":430,"rel":431},"https://docs.gitlab.com/user/application_security/secret_detection/secret_push_protection/#enable-secret-push-protection",[],"Enabling secret push protection"," is as easy as flipping a switch in GitLab Security Configuration.",[12,435,124],{},[126,437,130,439],{"className":438},[129],[132,440,137],{"src":441,"frameBorder":135,"allowFullScreen":136},"https://www.youtube.com/embed/ZNtwXVj3tA8?si=4xJ1rWdThpVjvebv",[72,443,64],{"id":444},"container-registry-updates",[12,446,447,448,453],{},"GitLab provides a ",[16,449,452],{"href":450,"rel":451},"https://docs.gitlab.com/user/packages/container_registry/",[],"built-in container registry",", making it easy for developers to store and manage container images for each GitLab project without context switching. GitLab 17.1 includes several features to enhance the security and efficiency of using the registry:",[32,455,456,464,476],{},[35,457,458,463],{},[16,459,462],{"href":460,"rel":461},"https://docs.gitlab.com/releases/17/gitlab-17-1-released/#container-images-linked-to-signatures",[],"Container images linked to signatures",": Container images in the registry can now be signed and associated with the signature. This can reduce image tampering by allowing developers to quickly find and validate the signatures that are associated with a container image",[35,465,466,471,472,475],{},[16,467,470],{"href":468,"rel":469},"https://docs.gitlab.com/releases/17/gitlab-17-1-released/#display-the-last-published-date-for-container-images",[],"Display the last published date for container images",": The container registry UI has been updated to include accurate ",[168,473,474],{},"last_published_at timestamps",", putting critical data at the top of view.",[35,477,478,483],{},[16,479,482],{"href":480,"rel":481},"https://docs.gitlab.com/releases/17/gitlab-17-1-released/#sort-container-registry-tags-by-publish-date",[],"Sort container registry tags by publish date",": Allows developers to quickly find and validate the most recently published container image.",[12,485,486],{},[278,487],{"alt":488,"src":489},"Signed container details","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098874/Blog/Content%20Images/Blog/Content%20Images/3_aHR0cHM6_1750098873860.png",[12,491,492,493,498,499,504],{},"Additionally we’ve introduced ",[16,494,497],{"href":495,"rel":496},"https://docs.gitlab.com/releases/17/gitlab-17-1-released/#container-scanning-for-registry",[],"container scanning for the registry",". The container images being used in your application may themselves be based on other container images that contain known vulnerabilities. Since developers heavily make use of the built-in container registry, it is a no-brainer to introduce ",[16,500,503],{"href":501,"rel":502},"https://docs.gitlab.com/user/application_security/container_scanning/",[],"container scanning"," for the registry.",[12,506,507,512,513,516],{},[16,508,511],{"href":509,"rel":510},"https://docs.gitlab.com/user/application_security/container_scanning/#container-scanning-for-registry",[],"Container scanning for the registry"," can be easily enabled by flipping a switch in GitLab Security Configuration. Once it’s enabled, whenever a container image is pushed to the container registry in your project, GitLab checks its tag. If the tag is ",[168,514,515],{},"latest",", then GitLab creates a new pipeline that scans the image and even produces a CycloneDX SBOM.",[12,518,519,521],{},[424,520,426],{}," At the moment, a vulnerability scan is only performed when a new advisory is published. We are working to detract all vulnerabilities in the registry itself in future iterations.",[12,523,124],{},[126,525,130,527],{"className":526},[129],[132,528,137],{"src":529,"frameBorder":135,"allowFullScreen":136},"https://www.youtube.com/embed/Zuk7Axs-CRw?si=odlgT5HWv_KOnBtq",[72,531,70],{"id":532},"api-security-scanning-updates",[12,534,535,536,541,542,547],{},"While SAST does a great job of finding vulnerabilities in static source code, there can still be vulnerabilities present in the running application that cannot be detected in source code, such as broken authentication and security misconfigurations. For these reasons, GitLab provides dynamic application security testing (",[16,537,540],{"href":538,"rel":539},"https://docs.gitlab.com/user/application_security/dast/",[],"DAST",") and ",[16,543,546],{"href":544,"rel":545},"https://docs.gitlab.com/user/application_security/api_fuzzing/",[],"Web API fuzzing"," to help discover bugs and potential security issues that other QA processes may miss.",[12,549,550,551,556,557,562],{},"In GitLab 17, we’ve introduced ",[16,552,555],{"href":553,"rel":554},"https://docs.gitlab.com/releases/17/gitlab-17-0-released/#api-security-testing-analyzer-updates",[],"several enhancements"," to our ",[16,558,561],{"href":559,"rel":560},"https://docs.gitlab.com/user/application_security/api_security_testing/",[],"dynamic scanners which target Web APIs",", including:",[32,564,565,568,571,574],{},[35,566,567],{},"system environment variables are now passed from the CI runner to the custom Python scripts used for certain advanced scenarios (like request signing)",[35,569,570],{},"API Security containers now run as a non-root user, which improves flexibility and compliance",[35,572,573],{},"support for servers that only offer TLSv1.3 ciphers, which enables more customers to adopt API security testing.",[35,575,576],{},"scanner image upgraded to Alpine 3.19, which addresses security vulnerabilities",[12,578,579,580,21,585,590],{},"In GitLab 17.1, additional configuration variables were added to ",[16,581,584],{"href":582,"rel":583},"https://docs.gitlab.com/releases/17/gitlab-17-1-released/#api-security-testing-analyzer-updates",[],"API security scanning",[16,586,589],{"href":587,"rel":588},"https://docs.gitlab.com/releases/17/gitlab-17-1-released/#fuzz-testing-analyzer-updates",[],"API fuzzing"," to allow:",[32,592,593,596,599],{},[35,594,595],{},"creation of a comma-separated list of HTTP success status codes that define whether the job has passed",[35,597,598],{},"disabling of waiting for the target API to become available before scanning begins",[35,600,601],{},"specifying the expected status code for the API target availability check",[12,603,124],{},[126,605,130,607],{"className":606},[129],[132,608,137],{"src":609,"frameBorder":135,"allowFullScreen":136},"https://www.youtube.com/embed/CcyOoBgSPUU?si=hAMQfmUTlLRKhPSg",[72,611,613],{"id":612},"learn-more-about-other-enhancements","Learn more about other enhancements",[12,615,616],{},"GitLab 17 and 17.1 also introduced several other security and governance features and enhancements, too many to cover in this blog. Some of these features include:",[32,618,619,627,635,643,651],{},[35,620,621,626],{},[16,622,625],{"href":623,"rel":624},"https://docs.gitlab.com/releases/17/gitlab-17-0-released/#updated-filtering-on-the-vulnerability-report",[],"Updated filtering on the Vulnerability Report",": You can now use the filtered search component to filter the Vulnerability Report by any combination of status, severity, tool, or activity.",[35,628,629,634],{},[16,630,633],{"href":631,"rel":632},"https://docs.gitlab.com/releases/17/gitlab-17-0-released/#toggle-merge-request-approval-policies-to-fail-open-or-fail-closed",[],"Toggle merge request approval policies to fail open or fail closed",": A new fail open option for merge request approval policies to offer flexibility to teams who want to ease the transition to policy enforcement as they roll out controls in their organization.",[35,636,637,642],{},[16,638,641],{"href":639,"rel":640},"https://docs.gitlab.com/releases/17/gitlab-17-0-released/#optional-configuration-for-policy-bot-comment",[],"Optional configuration for policy bot comment",": The security policy bot posts a comment on merge requests when they violate a policy to help users understand when policies are enforced on their project, when evaluation is completed, and if there are any violations blocking an MR, with guidance to resolve them.",[35,644,645,650],{},[16,646,649],{"href":647,"rel":648},"https://docs.gitlab.com/releases/17/gitlab-17-1-released/#merge-request-approval-policies-fail-openclosed-policy-editor",[],"Merge request approval policies fail open/closed (policy editor)",": Within the policy editor users can now toggle security policies to fail open or fail closed. This enhancement extends the YAML support to allow for simpler configuration within the policy editor view.",[35,652,653,658],{},[16,654,657],{"href":655,"rel":656},"https://docs.gitlab.com/releases/17/gitlab-17-1-released/#project-owners-receive-expiring-access-token-notifications",[],"Project owners receive expiring access token notifications",": Both project owners and maintainers with direct membership now receive email notifications when their project access tokens are close to expiring. This helps keep more people informed about upcoming token expiration.",[12,660,661],{},"These are some of the newest security and compliance enhancements provided in GitLab 17 and 17.1 that can be applied to strengthen your organization's security posture! To learn more about GitLab and the other ways we can strengthen your organization's security throughout all parts of the software development lifecycle, check out the following links:",[32,663,664,671,678,685,692,699],{},[35,665,666],{},[16,667,670],{"href":668,"rel":669},"https://about.gitlab.com/solutions/application-security-testing/",[],"GitLab Security and Compliance",[35,672,673],{},[16,674,677],{"href":675,"rel":676},"https://docs.gitlab.com/user/application_security/",[],"GitLab Application Security documentation",[35,679,680],{},[16,681,684],{"href":682,"rel":683},"https://youtu.be/Y4RC-SW8Ric",[],"GitLab security and governance overview video",[35,686,687],{},[16,688,691],{"href":689,"rel":690},"https://gitlab.com/gitlab-da/tutorials/security-and-governance/devsecops/simply-vulnerable-notes",[],"GitLab Complete DevSecOps demo",[35,693,694],{},[16,695,698],{"href":696,"rel":697},"https://gitlab-da.gitlab.io/tutorials/security-and-governance/devsecops/simply-vulnerable-notes/",[],"GitLab Complete DevSecOps tutorial",[35,700,701],{},[16,702,704],{"href":271,"rel":703},[],"Ultimate guide to the principle of least privilege",[706,707,708],"style",{},"html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":178,"searchDepth":196,"depth":196,"links":710},[711,712,713,714,715,716,717],{"id":74,"depth":196,"text":40},{"id":140,"depth":196,"text":46},{"id":259,"depth":196,"text":52},{"id":350,"depth":196,"text":58},{"id":444,"depth":196,"text":64},{"id":532,"depth":196,"text":70},{"id":612,"depth":196,"text":613},"security","2024-07-17","Dive deep into the new enhancements that can strengthen your organization's security posture, including how-to videos for SAST, DAST, API security, container registry, and more.","md",null,true,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098858/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_282096522_securitycompliance.jpeg_1750098857843.jpg",{},"/en-us/blog/get-to-know-the-security-and-governance-updates-in-gitlab-17-17-1",{"title":5,"description":720,"ogTitle":5,"ogDescription":720,"noIndex":728,"ogImage":724,"ogUrl":729,"ogSiteName":730,"ogType":731,"canonicalUrls":729},false,"https://about.gitlab.com/blog/get-to-know-the-security-and-governance-updates-in-gitlab-17-17-1","https://about.gitlab.com","article","get-to-know-the-security-and-governance-updates-in-gitlab-17-17-1","en-us/blog/get-to-know-the-security-and-governance-updates-in-gitlab-17-17-1",[718,735,736,737,738],"product","tutorial","DevSecOps platform","features","BlogPost","yz7HGVGlLw48kxQmtF1m8KmDZYn_-g7_9j0-U2sF0bs",{"logo":742,"freeTrial":747,"sales":752,"login":757,"items":762,"search":1089,"minimal":1120,"duo":1139,"switchNav":1148,"pricingDeployment":1159},{"config":743},{"href":744,"dataGaName":745,"dataGaLocation":746},"/","gitlab logo","header",{"text":748,"config":749},"Get free trial",{"href":750,"dataGaName":751,"dataGaLocation":746},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":753,"config":754},"Request a demo",{"href":755,"dataGaName":756,"dataGaLocation":746},"/sales/?contact-topic=request-demo","sales",{"text":758,"config":759},"Sign in",{"href":760,"dataGaName":761,"dataGaLocation":746},"https://gitlab.com/users/sign_in/","sign in",[763,792,892,897,1011,1067],{"text":764,"config":765,"menu":767},"Platform",{"dataNavLevelOne":766},"platform",{"type":768,"columns":769},"cards",[770,776,784],{"title":764,"description":771,"link":772},"The intelligent orchestration platform for DevSecOps",{"text":773,"config":774},"Explore our Platform",{"href":775,"dataGaName":766,"dataGaLocation":746},"/platform/",{"title":777,"description":778,"link":779},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":780,"config":781},"Meet GitLab Duo",{"href":782,"dataGaName":783,"dataGaLocation":746},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":785,"description":786,"link":787},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":788,"config":789},"Learn more",{"href":790,"dataGaName":791,"dataGaLocation":746},"/why-gitlab/","why gitlab",{"text":793,"left":723,"config":794,"menu":796},"Product",{"dataNavLevelOne":795},"solutions",{"type":797,"link":798,"columns":802,"feature":871},"lists",{"text":799,"config":800},"View all Solutions",{"href":801,"dataGaName":795,"dataGaLocation":746},"/solutions/",[803,827,850],{"title":804,"description":805,"link":806,"items":811},"Automation","CI/CD and automation to accelerate deployment",{"config":807},{"icon":808,"href":809,"dataGaName":810,"dataGaLocation":746},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[812,816,819,823],{"text":813,"config":814},"CI/CD",{"href":815,"dataGaLocation":746,"dataGaName":813},"/solutions/continuous-integration/",{"text":777,"config":817},{"href":782,"dataGaLocation":746,"dataGaName":818},"gitlab duo agent platform - product menu",{"text":820,"config":821},"Source Code Management",{"href":822,"dataGaLocation":746,"dataGaName":820},"/solutions/source-code-management/",{"text":824,"config":825},"Automated Software Delivery",{"href":809,"dataGaLocation":746,"dataGaName":826},"Automated software delivery",{"title":828,"description":829,"link":830,"items":835},"Security","Deliver code faster without compromising security",{"config":831},{"href":832,"dataGaName":833,"dataGaLocation":746,"icon":834},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[836,840,845],{"text":837,"config":838},"Application Security Testing",{"href":832,"dataGaName":839,"dataGaLocation":746},"Application security testing",{"text":841,"config":842},"Software Supply Chain Security",{"href":843,"dataGaLocation":746,"dataGaName":844},"/solutions/supply-chain/","Software supply chain security",{"text":846,"config":847},"Software Compliance",{"href":848,"dataGaName":849,"dataGaLocation":746},"/solutions/software-compliance/","software compliance",{"title":851,"link":852,"items":857},"Measurement",{"config":853},{"icon":854,"href":855,"dataGaName":856,"dataGaLocation":746},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[858,862,866],{"text":859,"config":860},"Visibility & Measurement",{"href":855,"dataGaLocation":746,"dataGaName":861},"Visibility and Measurement",{"text":863,"config":864},"Value Stream Management",{"href":865,"dataGaLocation":746,"dataGaName":863},"/solutions/value-stream-management/",{"text":867,"config":868},"Analytics & Insights",{"href":869,"dataGaLocation":746,"dataGaName":870},"/solutions/analytics-and-insights/","Analytics and insights",{"title":872,"type":797,"items":873},"GitLab for",[874,880,886],{"text":875,"config":876},"Enterprise",{"icon":877,"href":878,"dataGaLocation":746,"dataGaName":879},"Building","/enterprise/","enterprise",{"text":881,"config":882},"Small Business",{"icon":883,"href":884,"dataGaLocation":746,"dataGaName":885},"Work","/small-business/","small business",{"text":887,"config":888},"Public Sector",{"icon":889,"href":890,"dataGaLocation":746,"dataGaName":891},"Organization","/solutions/public-sector/","public sector",{"text":893,"config":894},"Pricing",{"href":895,"dataGaName":896,"dataGaLocation":746,"dataNavLevelOne":896},"/pricing/","pricing",{"text":898,"config":899,"menu":901},"Resources",{"dataNavLevelOne":900},"resources",{"type":797,"link":902,"columns":906,"feature":1000},{"text":903,"config":904},"View all resources",{"href":905,"dataGaName":900,"dataGaLocation":746},"/resources/",[907,940,967],{"title":908,"items":909},"Getting started",[910,915,920,925,930,935],{"text":911,"config":912},"Install",{"href":913,"dataGaName":914,"dataGaLocation":746},"/install/","install",{"text":916,"config":917},"Quick start guides",{"href":918,"dataGaName":919,"dataGaLocation":746},"/get-started/","quick setup checklists",{"text":921,"config":922},"Learn",{"href":923,"dataGaLocation":746,"dataGaName":924},"https://university.gitlab.com/","learn",{"text":926,"config":927},"Product documentation",{"href":928,"dataGaName":929,"dataGaLocation":746},"https://docs.gitlab.com/","product documentation",{"text":931,"config":932},"Best practice videos",{"href":933,"dataGaName":934,"dataGaLocation":746},"/getting-started-videos/","best practice videos",{"text":936,"config":937},"Integrations",{"href":938,"dataGaName":939,"dataGaLocation":746},"/integrations/","integrations",{"title":941,"items":942},"Discover",[943,948,953,958,962],{"text":944,"config":945},"Customer success stories",{"href":946,"dataGaName":947,"dataGaLocation":746},"/customers/","customer success stories",{"text":949,"config":950},"Blog",{"href":951,"dataGaName":952,"dataGaLocation":746},"/blog/","blog",{"text":954,"config":955},"Demo Hub",{"href":956,"dataGaName":957,"dataGaLocation":746},"/demo-hub/","demo hub",{"text":959,"config":960},"The Source",{"href":961,"dataGaName":952,"dataGaLocation":746},"/the-source/",{"text":963,"config":964},"Remote",{"href":965,"dataGaName":966,"dataGaLocation":746},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":968,"items":969},"Connect",[970,975,980,985,990,995],{"text":971,"config":972},"GitLab Services",{"href":973,"dataGaName":974,"dataGaLocation":746},"/services/","services",{"text":976,"config":977},"Contribute",{"href":978,"dataGaName":979,"dataGaLocation":746},"https://contributors.gitlab.com","contribute",{"text":981,"config":982},"Community",{"href":983,"dataGaName":984,"dataGaLocation":746},"/community/","community",{"text":986,"config":987},"Forum",{"href":988,"dataGaName":989,"dataGaLocation":746},"https://forum.gitlab.com/","forum",{"text":991,"config":992},"Events",{"href":993,"dataGaName":994,"dataGaLocation":746},"/events/","events",{"text":996,"config":997},"Partners",{"href":998,"dataGaName":999,"dataGaLocation":746},"/partners/","partners",{"config":1001,"title":1004,"text":1005,"link":1006},{"background":1002,"textColor":1003},"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":1007,"config":1008},"Read the latest",{"href":1009,"dataGaName":1010,"dataGaLocation":746},"/whats-new/","whats new",{"text":1012,"config":1013,"menu":1015},"Company",{"dataNavLevelOne":1014},"company",{"type":797,"columns":1016},[1017],{"items":1018},[1019,1024,1030,1032,1037,1042,1047,1052,1057,1062],{"text":1020,"config":1021},"About",{"href":1022,"dataGaName":1023,"dataGaLocation":746},"/company/","about",{"text":1025,"config":1026,"footerGa":1029},"Jobs",{"href":1027,"dataGaName":1028,"dataGaLocation":746},"/jobs/","jobs",{"dataGaName":1028},{"text":991,"config":1031},{"href":993,"dataGaName":994,"dataGaLocation":746},{"text":1033,"config":1034},"Leadership",{"href":1035,"dataGaName":1036,"dataGaLocation":746},"/company/team/e-group/","leadership",{"text":1038,"config":1039},"Handbook",{"href":1040,"dataGaName":1041,"dataGaLocation":746},"https://handbook.gitlab.com/","handbook",{"text":1043,"config":1044},"Investor relations",{"href":1045,"dataGaName":1046,"dataGaLocation":746},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1048,"config":1049},"Trust Center",{"href":1050,"dataGaName":1051,"dataGaLocation":746},"/security/","trust center",{"text":1053,"config":1054},"AI Transparency Center",{"href":1055,"dataGaName":1056,"dataGaLocation":746},"/ai-transparency-center/","ai transparency center",{"text":1058,"config":1059},"Newsletter",{"href":1060,"dataGaName":1061,"dataGaLocation":746},"/company/contact/#contact-forms","newsletter",{"text":1063,"config":1064},"Press",{"href":1065,"dataGaName":1066,"dataGaLocation":746},"/press/","press",{"text":1068,"config":1069,"menu":1070},"Contact us",{"dataNavLevelOne":1014},{"type":797,"columns":1071},[1072],{"items":1073},[1074,1079,1084],{"text":1075,"config":1076},"Talk to sales",{"href":1077,"dataGaName":1078,"dataGaLocation":746},"/sales/","talk to sales",{"text":1080,"config":1081},"Support portal",{"href":1082,"dataGaName":1083,"dataGaLocation":746},"https://support.gitlab.com/hc/en-us","support portal",{"text":1085,"config":1086},"Customer portal",{"href":1087,"dataGaName":1088,"dataGaLocation":746},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1090,"login":1091,"suggestions":1098},"Close",{"text":1092,"link":1093},"To search repositories and projects, login to",{"text":1094,"config":1095},"gitlab.com",{"href":760,"dataGaName":1096,"dataGaLocation":1097},"search login","search",{"text":1099,"default":1100},"Suggestions",[1101,1103,1107,1109,1113,1117],{"text":777,"config":1102},{"href":782,"dataGaName":777,"dataGaLocation":1097},{"text":1104,"config":1105},"Code Suggestions (AI)",{"href":1106,"dataGaName":1104,"dataGaLocation":1097},"/solutions/code-suggestions/",{"text":813,"config":1108},{"href":815,"dataGaName":813,"dataGaLocation":1097},{"text":1110,"config":1111},"GitLab on AWS",{"href":1112,"dataGaName":1110,"dataGaLocation":1097},"/partners/technology-partners/aws/",{"text":1114,"config":1115},"GitLab on Google Cloud",{"href":1116,"dataGaName":1114,"dataGaLocation":1097},"/partners/technology-partners/google-cloud-platform/",{"text":1118,"config":1119},"Why GitLab?",{"href":790,"dataGaName":1118,"dataGaLocation":1097},{"freeTrial":1121,"mobileIcon":1126,"desktopIcon":1131,"secondaryButton":1134},{"text":1122,"config":1123},"Start free trial",{"href":1124,"dataGaName":751,"dataGaLocation":1125},"https://gitlab.com/-/trials/new/","nav",{"altText":1127,"config":1128},"Gitlab Icon",{"src":1129,"dataGaName":1130,"dataGaLocation":1125},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1127,"config":1132},{"src":1133,"dataGaName":1130,"dataGaLocation":1125},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1135,"config":1136},"Get Started",{"href":1137,"dataGaName":1138,"dataGaLocation":1125},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1140,"mobileIcon":1144,"desktopIcon":1146},{"text":1141,"config":1142},"Learn more about GitLab Duo",{"href":782,"dataGaName":1143,"dataGaLocation":1125},"gitlab duo",{"altText":1127,"config":1145},{"src":1129,"dataGaName":1130,"dataGaLocation":1125},{"altText":1127,"config":1147},{"src":1133,"dataGaName":1130,"dataGaLocation":1125},{"button":1149,"mobileIcon":1154,"desktopIcon":1156},{"text":1150,"config":1151},"/switch",{"href":1152,"dataGaName":1153,"dataGaLocation":1125},"#contact","switch",{"altText":1127,"config":1155},{"src":1129,"dataGaName":1130,"dataGaLocation":1125},{"altText":1127,"config":1157},{"src":1158,"dataGaName":1130,"dataGaLocation":1125},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1160,"mobileIcon":1165,"desktopIcon":1167},{"text":1161,"config":1162},"Back to pricing",{"href":895,"dataGaName":1163,"dataGaLocation":1125,"icon":1164},"back to pricing","GoBack",{"altText":1127,"config":1166},{"src":1129,"dataGaName":1130,"dataGaLocation":1125},{"altText":1127,"config":1168},{"src":1133,"dataGaName":1130,"dataGaLocation":1125},{"title":1170,"titleMobile":1171,"button":1172,"config":1177},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":788,"config":1173},{"href":1174,"dataGaName":1175,"dataGaLocation":1176},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1178,"disabled":728},"release",{"data":1180},{"text":1181,"source":1182,"edit":1188,"contribute":1193,"config":1198,"items":1203,"minimal":1412},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1183,"config":1184},"View page source",{"href":1185,"dataGaName":1186,"dataGaLocation":1187},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1189,"config":1190},"Edit this page",{"href":1191,"dataGaName":1192,"dataGaLocation":1187},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1194,"config":1195},"Please contribute",{"href":1196,"dataGaName":1197,"dataGaLocation":1187},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1199,"facebook":1200,"youtube":1201,"linkedin":1202},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1204,1251,1304,1348,1380],{"title":893,"links":1205,"subMenu":1220},[1206,1210,1215],{"text":1207,"config":1208},"View plans",{"href":895,"dataGaName":1209,"dataGaLocation":1187},"view plans",{"text":1211,"config":1212},"Why Premium?",{"href":1213,"dataGaName":1214,"dataGaLocation":1187},"/pricing/premium/","why premium",{"text":1216,"config":1217},"Why Ultimate?",{"href":1218,"dataGaName":1219,"dataGaLocation":1187},"/pricing/ultimate/","why ultimate",[1221],{"title":1222,"links":1223},"Contact Us",[1224,1227,1229,1231,1236,1241,1246],{"text":1225,"config":1226},"Contact sales",{"href":1077,"dataGaName":756,"dataGaLocation":1187},{"text":1080,"config":1228},{"href":1082,"dataGaName":1083,"dataGaLocation":1187},{"text":1085,"config":1230},{"href":1087,"dataGaName":1088,"dataGaLocation":1187},{"text":1232,"config":1233},"Status",{"href":1234,"dataGaName":1235,"dataGaLocation":1187},"https://status.gitlab.com/","status",{"text":1237,"config":1238},"Terms of use",{"href":1239,"dataGaName":1240,"dataGaLocation":1187},"/terms/","terms of use",{"text":1242,"config":1243},"Privacy statement",{"href":1244,"dataGaName":1245,"dataGaLocation":1187},"/privacy/","privacy statement",{"text":1247,"config":1248},"Cookie preferences",{"dataGaName":1249,"dataGaLocation":1187,"id":1250,"isOneTrustButton":723},"cookie preferences","ot-sdk-btn",{"title":793,"links":1252,"subMenu":1260},[1253,1256],{"text":737,"config":1254},{"href":775,"dataGaName":1255,"dataGaLocation":1187},"devsecops platform",{"text":1257,"config":1258},"AI-Assisted Development",{"href":782,"dataGaName":1259,"dataGaLocation":1187},"ai-assisted development",[1261],{"title":1262,"links":1263},"Topics",[1264,1269,1274,1279,1284,1289,1294,1299],{"text":1265,"config":1266},"CICD",{"href":1267,"dataGaName":1268,"dataGaLocation":1187},"/topics/ci-cd/","cicd",{"text":1270,"config":1271},"GitOps",{"href":1272,"dataGaName":1273,"dataGaLocation":1187},"/topics/gitops/","gitops",{"text":1275,"config":1276},"DevOps",{"href":1277,"dataGaName":1278,"dataGaLocation":1187},"/topics/devops/","devops",{"text":1280,"config":1281},"Version Control",{"href":1282,"dataGaName":1283,"dataGaLocation":1187},"/topics/version-control/","version control",{"text":1285,"config":1286},"DevSecOps",{"href":1287,"dataGaName":1288,"dataGaLocation":1187},"/topics/devsecops/","devsecops",{"text":1290,"config":1291},"Cloud Native",{"href":1292,"dataGaName":1293,"dataGaLocation":1187},"/topics/cloud-native/","cloud native",{"text":1295,"config":1296},"AI for Coding",{"href":1297,"dataGaName":1298,"dataGaLocation":1187},"/topics/devops/ai-for-coding/","ai for coding",{"text":1300,"config":1301},"Agentic AI",{"href":1302,"dataGaName":1303,"dataGaLocation":1187},"/topics/agentic-ai/","agentic ai",{"title":1305,"links":1306},"Solutions",[1307,1309,1311,1316,1320,1323,1327,1330,1332,1335,1338,1343],{"text":837,"config":1308},{"href":832,"dataGaName":837,"dataGaLocation":1187},{"text":826,"config":1310},{"href":809,"dataGaName":810,"dataGaLocation":1187},{"text":1312,"config":1313},"Agile development",{"href":1314,"dataGaName":1315,"dataGaLocation":1187},"/solutions/agile-delivery/","agile delivery",{"text":1317,"config":1318},"SCM",{"href":822,"dataGaName":1319,"dataGaLocation":1187},"source code management",{"text":1265,"config":1321},{"href":815,"dataGaName":1322,"dataGaLocation":1187},"continuous integration & delivery",{"text":1324,"config":1325},"Value stream management",{"href":865,"dataGaName":1326,"dataGaLocation":1187},"value stream management",{"text":1270,"config":1328},{"href":1329,"dataGaName":1273,"dataGaLocation":1187},"/solutions/gitops/",{"text":875,"config":1331},{"href":878,"dataGaName":879,"dataGaLocation":1187},{"text":1333,"config":1334},"Small business",{"href":884,"dataGaName":885,"dataGaLocation":1187},{"text":1336,"config":1337},"Public sector",{"href":890,"dataGaName":891,"dataGaLocation":1187},{"text":1339,"config":1340},"Education",{"href":1341,"dataGaName":1342,"dataGaLocation":1187},"/solutions/education/","education",{"text":1344,"config":1345},"Financial services",{"href":1346,"dataGaName":1347,"dataGaLocation":1187},"/solutions/finance/","financial services",{"title":898,"links":1349},[1350,1352,1354,1356,1359,1361,1364,1366,1368,1370,1372,1374,1376,1378],{"text":911,"config":1351},{"href":913,"dataGaName":914,"dataGaLocation":1187},{"text":916,"config":1353},{"href":918,"dataGaName":919,"dataGaLocation":1187},{"text":921,"config":1355},{"href":923,"dataGaName":924,"dataGaLocation":1187},{"text":926,"config":1357},{"href":928,"dataGaName":1358,"dataGaLocation":1187},"docs",{"text":949,"config":1360},{"href":951,"dataGaName":952,"dataGaLocation":1187},{"text":1362,"config":1363},"What's new",{"href":1009,"dataGaName":1010,"dataGaLocation":1187},{"text":944,"config":1365},{"href":946,"dataGaName":947,"dataGaLocation":1187},{"text":963,"config":1367},{"href":965,"dataGaName":966,"dataGaLocation":1187},{"text":971,"config":1369},{"href":973,"dataGaName":974,"dataGaLocation":1187},{"text":976,"config":1371},{"href":978,"dataGaName":979,"dataGaLocation":1187},{"text":981,"config":1373},{"href":983,"dataGaName":984,"dataGaLocation":1187},{"text":986,"config":1375},{"href":988,"dataGaName":989,"dataGaLocation":1187},{"text":991,"config":1377},{"href":993,"dataGaName":994,"dataGaLocation":1187},{"text":996,"config":1379},{"href":998,"dataGaName":999,"dataGaLocation":1187},{"title":1012,"links":1381},[1382,1384,1386,1388,1390,1392,1396,1401,1403,1405,1407],{"text":1020,"config":1383},{"href":1022,"dataGaName":1014,"dataGaLocation":1187},{"text":1025,"config":1385},{"href":1027,"dataGaName":1028,"dataGaLocation":1187},{"text":1033,"config":1387},{"href":1035,"dataGaName":1036,"dataGaLocation":1187},{"text":1038,"config":1389},{"href":1040,"dataGaName":1041,"dataGaLocation":1187},{"text":1043,"config":1391},{"href":1045,"dataGaName":1046,"dataGaLocation":1187},{"text":1393,"config":1394},"Sustainability",{"href":1395,"dataGaName":1393,"dataGaLocation":1187},"/sustainability/",{"text":1397,"config":1398},"Diversity, inclusion and belonging (DIB)",{"href":1399,"dataGaName":1400,"dataGaLocation":1187},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1048,"config":1402},{"href":1050,"dataGaName":1051,"dataGaLocation":1187},{"text":1058,"config":1404},{"href":1060,"dataGaName":1061,"dataGaLocation":1187},{"text":1063,"config":1406},{"href":1065,"dataGaName":1066,"dataGaLocation":1187},{"text":1408,"config":1409},"Modern Slavery Transparency Statement",{"href":1410,"dataGaName":1411,"dataGaLocation":1187},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1413},[1414,1417,1420],{"text":1415,"config":1416},"Terms",{"href":1239,"dataGaName":1240,"dataGaLocation":1187},{"text":1418,"config":1419},"Cookies",{"dataGaName":1249,"dataGaLocation":1187,"id":1250,"isOneTrustButton":723},{"text":1421,"config":1422},"Privacy",{"href":1244,"dataGaName":1245,"dataGaLocation":1187},[1424],{"id":1425,"title":7,"body":722,"config":1426,"content":1428,"description":722,"extension":1432,"meta":1433,"navigation":723,"path":1434,"seo":1435,"stem":1436,"__hash__":1437},"blogAuthors/en-us/blog/authors/fernando-diaz.yml",{"template":1427},"BlogAuthor",{"name":7,"config":1429},{"headshot":1430,"ctfId":1431},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659556/Blog/Author%20Headshots/fern_diaz.png","fjdiaz","yml",{},"/en-us/blog/authors/fernando-diaz",{},"en-us/blog/authors/fernando-diaz","lxRJIOydP4_yzYZvsPcuQevP9AYAKREF7i8QmmdnOWc",[1439,1447,1455],{"title":1440,"description":1441,"heroImage":1442,"category":718,"date":1443,"authors":1444,"slug":1446,"externalUrl":722},"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",[1445],"Julian Thome","improved-scope-offset-fingerprinting",{"title":1448,"description":1449,"heroImage":1442,"category":718,"date":1450,"authors":1451,"slug":1454,"externalUrl":722},"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",[1452,1453],"Erick Bajao","Joe Randazzo","gitlab-secrets-manager-add-eso-terraform-api-support",{"title":1456,"description":1457,"heroImage":1458,"category":718,"date":1459,"authors":1460,"slug":1462,"externalUrl":722},"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",[1461],"Alisa Ho","claude-security-and-gitlab",{"promotions":1464},[1465,1479,1490,1501],{"id":1466,"categories":1467,"header":1469,"text":1470,"button":1471,"image":1476},"ai-modernization",[1468],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1472,"config":1473},"Get your AI maturity score",{"href":1474,"dataGaName":1475,"dataGaLocation":952},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1477},{"src":1478},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1480,"categories":1481,"header":1482,"text":1470,"button":1483,"image":1487},"devops-modernization",[735,1288],"Are you just managing tools or shipping innovation?",{"text":1484,"config":1485},"Get your DevOps maturity score",{"href":1486,"dataGaName":1475,"dataGaLocation":952},"/assessments/devops-modernization-assessment/",{"config":1488},{"src":1489},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1491,"categories":1492,"header":1493,"text":1470,"button":1494,"image":1498},"security-modernization",[718],"Are you trading speed for security?",{"text":1495,"config":1496},"Get your security maturity score",{"href":1497,"dataGaName":1475,"dataGaLocation":952},"/assessments/security-modernization-assessment/",{"config":1499},{"src":1500},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1502,"paths":1503,"header":1506,"text":1507,"button":1508,"image":1513},"github-azure-migration",[1504,1505],"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":1509,"config":1510},"See how GitLab compares to GitHub",{"href":1511,"dataGaName":1512,"dataGaLocation":952},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1514},{"src":1489},{"header":1516,"blurb":1517,"button":1518,"secondaryButton":1523},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1519,"config":1520},"Get your free trial",{"href":1521,"dataGaName":751,"dataGaLocation":1522},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1225,"config":1524},{"href":1077,"dataGaName":756,"dataGaLocation":1522},1786803768967]