{
    "api_version": "1",
    "kind": "dse_post",
    "self": "https://update.dsesecurity.com/api/v1/posts/gitlab-read-only-container-registry-deploy-token/",
    "item": {
        "id": "https://update.dsesecurity.com/updates/gitlab-read-only-container-registry-deploy-token/",
        "slug": "gitlab-read-only-container-registry-deploy-token",
        "url": "https://update.dsesecurity.com/updates/gitlab-read-only-container-registry-deploy-token/",
        "alternate_urls": {
            "markdown": "https://update.dsesecurity.com/updates/gitlab-read-only-container-registry-deploy-token.md",
            "json": "https://update.dsesecurity.com/api/v1/posts/gitlab-read-only-container-registry-deploy-token/"
        },
        "title": "Limit GitLab deployment credentials to registry pulls",
        "summary": "Use the registry-read scope when a deployment system only needs to download container images.",
        "format": {
            "slug": "guide",
            "name": "Guide"
        },
        "priority": {
            "slug": "info",
            "name": "Information"
        },
        "featured": false,
        "image": {
            "theme": "physical-security",
            "label": "Physical security",
            "alt": "Integrated video surveillance and controlled entry at a modern commercial facility.",
            "card_url": "https://update.dsesecurity.com/assets/editorial/physical-security-card.webp?v=1.8.20",
            "hero_url": "https://update.dsesecurity.com/assets/editorial/physical-security-hero.webp?v=1.8.20",
            "social_url": "https://update.dsesecurity.com/assets/editorial/physical-security-social-v2.jpg?v=1.8.20",
            "width": 2400,
            "height": 1350
        },
        "topics": [
            {
                "slug": "cybersecurity",
                "name": "Cybersecurity",
                "url": "https://update.dsesecurity.com/topic/cybersecurity/"
            },
            {
                "slug": "it",
                "name": "IT",
                "url": "https://update.dsesecurity.com/topic/it/"
            }
        ],
        "author": {
            "name": "DSE Security Editorial Team",
            "url": "https://update.dsesecurity.com/#editorial-team",
            "type": "Organization"
        },
        "publisher": {
            "name": "Detection Systems & Engineering",
            "url": "https://dsesecurity.com/"
        },
        "published_at": "2026-10-15T00:43:35+00:00",
        "modified_at": "2026-10-15T00:44:33+00:00",
        "reviewed_on": "2026-10-14",
        "reading_minutes": 2,
        "word_count": 241,
        "potentially_affected": "Use this guide for a deployment consumer that only pulls from the relevant GitLab container registry. Check the current GitLab version, registry location, and project or group boundary.",
        "dse_recommendation": "DSE recommends issuing a purpose-specific token for the deployment consumer and granting only the scope needed for its task.",
        "primary_source": {
            "name": "GitLab — Deploy tokens",
            "url": "https://docs.gitlab.com/user/project/deploy_tokens/",
            "published_on": null,
            "authority": "docs.gitlab.com"
        },
        "publishing_principles": "https://update.dsesecurity.com/updates/dse-updates-editorial-methodology/",
        "usage_info": "https://update.dsesecurity.com/usage/",
        "copyright_notice": "Copyright © 2026 Detection Systems & Engineering. All rights reserved.",
        "content_html": "<p>Use the registry-read scope when a deployment system only needs to download container images.</p>\n<h2>Source facts</h2>\n<p>GitLab’s deploy-token documentation distinguishes read_registry for pulling images from write_registry for pushing them. Deploy tokens can be created at project or group scope, and an expiration date can be defined. GitLab documents revocation when a token is no longer required. A deploy token is not a general GitLab public API credential, although some package-registry endpoints support it.</p>\n<p>Source: <a href=\"https://docs.gitlab.com/user/project/deploy_tokens/\">GitLab — Deploy tokens</a>.</p>\n<h2>Applicability</h2>\n<p>Use this guide for a deployment consumer that only pulls from the relevant GitLab container registry. Check the current GitLab version, registry location, and project or group boundary.</p>\n<h2>DSE recommendation</h2>\n<p>DSE recommends issuing a purpose-specific token for the deployment consumer and granting only the scope needed for its task. Prefer the narrowest practical project boundary, record the owner and expiry, and prepare replacement before expiry affects a deployment. Store the token in the deployment platform’s approved credential facility. Keep it out of image layers, source files, command transcripts, and routine support records. Retire the old credential after verifying that the replacement works for the intended consumer.</p>\n<h2>Verification</h2>\n<p>Pull an approved test image through the deployment workflow. In a controlled test, confirm that the pull-only credential cannot push an image or access an unrelated project. Verify replacement and revocation behavior, then record the token identifier, scopes, owner, and expiry without storing its value.</p>\n<h2>Official reference</h2>\n<p><a href=\"https://docs.gitlab.com/user/project/deploy_tokens/\">GitLab — Deploy tokens</a>. Reviewed October 14, 2026.</p>",
        "content_text": "Use the registry-read scope when a deployment system only needs to download container images.\nSource facts\nGitLab’s deploy-token documentation distinguishes read_registry for pulling images from write_registry for pushing them. Deploy tokens can be created at project or group scope, and an expiration date can be defined. GitLab documents revocation when a token is no longer required. A deploy token is not a general GitLab public API credential, although some package-registry endpoints support it.\nSource: GitLab — Deploy tokens.\nApplicability\nUse this guide for a deployment consumer that only pulls from the relevant GitLab container registry. Check the current GitLab version, registry location, and project or group boundary.\nDSE recommendation\nDSE recommends issuing a purpose-specific token for the deployment consumer and granting only the scope needed for its task. Prefer the narrowest practical project boundary, record the owner and expiry, and prepare replacement before expiry affects a deployment. Store the token in the deployment platform’s approved credential facility. Keep it out of image layers, source files, command transcripts, and routine support records. Retire the old credential after verifying that the replacement works for the intended consumer.\nVerification\nPull an approved test image through the deployment workflow. In a controlled test, confirm that the pull-only credential cannot push an image or access an unrelated project. Verify replacement and revocation behavior, then record the token identifier, scopes, owner, and expiry without storing its value.\nOfficial reference\nGitLab — Deploy tokens. Reviewed October 14, 2026.",
        "content_markdown": "Use the registry-read scope when a deployment system only needs to download container images.\n\n## Source facts\n\nGitLab’s deploy-token documentation distinguishes read_registry for pulling images from write_registry for pushing them. Deploy tokens can be created at project or group scope, and an expiration date can be defined. GitLab documents revocation when a token is no longer required. A deploy token is not a general GitLab public API credential, although some package-registry endpoints support it.\n\nSource: [GitLab — Deploy tokens](https://docs.gitlab.com/user/project/deploy_tokens/).\n\n## Applicability\n\nUse this guide for a deployment consumer that only pulls from the relevant GitLab container registry. Check the current GitLab version, registry location, and project or group boundary.\n\n## DSE recommendation\n\nDSE recommends issuing a purpose-specific token for the deployment consumer and granting only the scope needed for its task. Prefer the narrowest practical project boundary, record the owner and expiry, and prepare replacement before expiry affects a deployment. Store the token in the deployment platform’s approved credential facility. Keep it out of image layers, source files, command transcripts, and routine support records. Retire the old credential after verifying that the replacement works for the intended consumer.\n\n## Verification\n\nPull an approved test image through the deployment workflow. In a controlled test, confirm that the pull-only credential cannot push an image or access an unrelated project. Verify replacement and revocation behavior, then record the token identifier, scopes, owner, and expiry without storing its value.\n\n## Official reference\n\n[GitLab — Deploy tokens](https://docs.gitlab.com/user/project/deploy_tokens/). Reviewed October 14, 2026."
    },
    "json_ld": {
        "@context": "https://schema.org",
        "@graph": [
            {
                "@type": "Organization",
                "@id": "https://dsesecurity.com/#organization",
                "name": "Detection Systems & Engineering",
                "alternateName": "DSE Security",
                "url": "https://dsesecurity.com/",
                "logo": {
                    "@type": "ImageObject",
                    "url": "https://update.dsesecurity.com/assets/dse-logo-20260812.png?v=1.8.20"
                }
            },
            {
                "@type": "Organization",
                "@id": "https://update.dsesecurity.com/#editorial-team",
                "name": "DSE Security Editorial Team",
                "url": "https://update.dsesecurity.com/",
                "parentOrganization": {
                    "@id": "https://dsesecurity.com/#organization"
                }
            },
            {
                "@type": "WebSite",
                "@id": "https://update.dsesecurity.com/#website",
                "name": "DSE Updates",
                "alternateName": "DSE Security Knowledge Hub",
                "url": "https://update.dsesecurity.com/",
                "inLanguage": "en-US",
                "publisher": {
                    "@id": "https://dsesecurity.com/#organization"
                },
                "potentialAction": {
                    "@type": "SearchAction",
                    "target": {
                        "@type": "EntryPoint",
                        "urlTemplate": "https://update.dsesecurity.com/?q={search_term_string}"
                    },
                    "query-input": "required name=search_term_string"
                }
            },
            {
                "@type": "WebPage",
                "@id": "https://update.dsesecurity.com/updates/gitlab-read-only-container-registry-deploy-token/",
                "url": "https://update.dsesecurity.com/updates/gitlab-read-only-container-registry-deploy-token/",
                "isPartOf": {
                    "@id": "https://update.dsesecurity.com/#website"
                },
                "lastReviewed": "2026-10-14"
            },
            {
                "@type": "BreadcrumbList",
                "@id": "https://update.dsesecurity.com/updates/gitlab-read-only-container-registry-deploy-token/#breadcrumbs",
                "itemListElement": [
                    {
                        "@type": "ListItem",
                        "position": 1,
                        "name": "DSE Updates",
                        "item": "https://update.dsesecurity.com/"
                    },
                    {
                        "@type": "ListItem",
                        "position": 2,
                        "name": "Limit GitLab deployment credentials to registry pulls",
                        "item": "https://update.dsesecurity.com/updates/gitlab-read-only-container-registry-deploy-token/"
                    }
                ]
            },
            {
                "@type": [
                    "Article",
                    "TechArticle"
                ],
                "@id": "https://update.dsesecurity.com/updates/gitlab-read-only-container-registry-deploy-token/#article",
                "identifier": "https://update.dsesecurity.com/updates/gitlab-read-only-container-registry-deploy-token/",
                "url": "https://update.dsesecurity.com/updates/gitlab-read-only-container-registry-deploy-token/",
                "headline": "Limit GitLab deployment credentials to registry pulls",
                "description": "Use the registry-read scope when a deployment system only needs to download container images.",
                "abstract": "Use the registry-read scope when a deployment system only needs to download container images.",
                "articleBody": "Use the registry-read scope when a deployment system only needs to download container images.\nSource facts\nGitLab’s deploy-token documentation distinguishes read_registry for pulling images from write_registry for pushing them. Deploy tokens can be created at project or group scope, and an expiration date can be defined. GitLab documents revocation when a token is no longer required. A deploy token is not a general GitLab public API credential, although some package-registry endpoints support it.\nSource: GitLab — Deploy tokens.\nApplicability\nUse this guide for a deployment consumer that only pulls from the relevant GitLab container registry. Check the current GitLab version, registry location, and project or group boundary.\nDSE recommendation\nDSE recommends issuing a purpose-specific token for the deployment consumer and granting only the scope needed for its task. Prefer the narrowest practical project boundary, record the owner and expiry, and prepare replacement before expiry affects a deployment. Store the token in the deployment platform’s approved credential facility. Keep it out of image layers, source files, command transcripts, and routine support records. Retire the old credential after verifying that the replacement works for the intended consumer.\nVerification\nPull an approved test image through the deployment workflow. In a controlled test, confirm that the pull-only credential cannot push an image or access an unrelated project. Verify replacement and revocation behavior, then record the token identifier, scopes, owner, and expiry without storing its value.\nOfficial reference\nGitLab — Deploy tokens. Reviewed October 14, 2026.",
                "datePublished": "2026-10-15T00:43:35+00:00",
                "dateModified": "2026-10-15T00:44:33+00:00",
                "mainEntityOfPage": {
                    "@id": "https://update.dsesecurity.com/updates/gitlab-read-only-container-registry-deploy-token/"
                },
                "inLanguage": "en-US",
                "isAccessibleForFree": true,
                "author": {
                    "@type": "Organization",
                    "name": "DSE Security Editorial Team",
                    "url": "https://update.dsesecurity.com/#editorial-team"
                },
                "publisher": {
                    "@id": "https://dsesecurity.com/#organization"
                },
                "image": {
                    "@type": "ImageObject",
                    "@id": "https://update.dsesecurity.com/updates/gitlab-read-only-container-registry-deploy-token/#primaryimage",
                    "url": "https://update.dsesecurity.com/assets/editorial/physical-security-social-v2.jpg?v=1.8.20",
                    "contentUrl": "https://update.dsesecurity.com/assets/editorial/physical-security-social-v2.jpg?v=1.8.20",
                    "width": 1200,
                    "height": 630,
                    "caption": "Limit GitLab deployment credentials to registry pulls"
                },
                "articleSection": [
                    "Cybersecurity",
                    "IT"
                ],
                "keywords": [
                    "Cybersecurity",
                    "IT",
                    "Guide",
                    "Information priority"
                ],
                "genre": "Guide",
                "about": [
                    {
                        "@type": "Thing",
                        "name": "Cybersecurity",
                        "url": "https://update.dsesecurity.com/topic/cybersecurity/"
                    },
                    {
                        "@type": "Thing",
                        "name": "IT",
                        "url": "https://update.dsesecurity.com/topic/it/"
                    }
                ],
                "wordCount": 241,
                "timeRequired": "PT2M",
                "publishingPrinciples": "https://update.dsesecurity.com/updates/dse-updates-editorial-methodology/",
                "usageInfo": "https://update.dsesecurity.com/usage/",
                "copyrightHolder": {
                    "@id": "https://dsesecurity.com/#organization"
                },
                "copyrightNotice": "Copyright © 2026 Detection Systems & Engineering. All rights reserved.",
                "citation": {
                    "@type": "CreativeWork",
                    "name": "GitLab — Deploy tokens",
                    "url": "https://docs.gitlab.com/user/project/deploy_tokens/"
                }
            }
        ]
    }
}