[{"data":1,"prerenderedAt":755},["ShallowReactive",2],{"/ja-jp/blog/integrate-external-security-scanners-into-your-devsecops-workflow":3,"navigation-ja-jp":37,"banner-ja-jp":436,"footer-ja-jp":446,"blog-post-authors-ja-jp-Sam Morris":652,"blog-related-posts-ja-jp-integrate-external-security-scanners-into-your-devsecops-workflow":666,"assessment-promotions-ja-jp":707,"next-steps-ja-jp":746},{"id":4,"title":5,"authorSlugs":6,"body":8,"categorySlug":9,"config":10,"content":14,"description":8,"extension":26,"isFeatured":12,"meta":27,"navigation":28,"path":29,"publishedDate":20,"seo":30,"stem":34,"tagSlugs":35,"__hash__":36},"blogPosts/ja-jp/blog/integrate-external-security-scanners-into-your-devsecops-workflow.yml","Integrate External Security Scanners Into Your Devsecops Workflow",[7],"sam-morris",null,"security",{"slug":11,"featured":12,"template":13},"integrate-external-security-scanners-into-your-devsecops-workflow",false,"BlogPost",{"heroImage":15,"body":16,"authors":17,"updatedDate":19,"date":20,"title":21,"tags":22,"description":25,"category":9},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098768/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%282%29_1khno1AUtxuL6zzmEmjK7v_1750098768560.png","ソフトウェアを開発する毎日において、セキュリティ脆弱性が本番環境に混入する機会は常に存在します。そのため、セキュリティをシフトレフトし、セキュリティテストとそれによって検出される脆弱性をソフトウェア開発ライフサイクルの最前線に配置することが、これまで以上に重要になっています。\n\nGitLabは幅広い種類のセキュリティスキャナーを提供しており、AI搭載DevSecOpsプラットフォームによって、ソフトウェアのセキュリティを完全に可視化します。GitLabでは、スキャンの実行だけでなく、結果の表示、マージリクエストポリシーによる承認プロセスの組み込み、デフォルトブランチにおける現在の脆弱性の表示を通じて、脆弱性レポートで今後のトリアージに活用できます。\n\n## セキュリティスキャンの実行方法\n\nGitLab Ultimateでは、マージリクエストウィジェットに脆弱性が直接表示され、コミットごとに更新されます。これらのスキャンは通常、プロジェクトの`.gitlab-ci.yml`パイプラインであれ、別途管理される[コンプライアンスパイプライン](https://docs.gitlab.com/ja-jp/user/compliance/compliance_pipelines/)、セキュリティポリシー、または別の.ymlファイルからの[インクルードされたパイプライン設定](https://docs.gitlab.com/ja-jp/ci/yaml/includes/)であれ、パイプライン内のジョブを通じて実行されます。GitLabのネイティブセキュリティスキャナーを実行することも、外部スキャナーを実行することもできます。この記事では、Snykスキャンを実行し、依存関係スキャン結果を脆弱性レコードとしてGitLabにフィードバックする方法を試しました。さらに、Static Analysis Results Interchange Format（SARIF）コンバーターを活用して、カスタムスクリプトを使用せずにSnykからSAST結果を直接読み取る方法も紹介します。\n\n## 外部スキャナーの使用\n\nGitLabは高い拡張性を持ち、プラットフォームでは多様なツールを統合できます。ビルトインのセキュリティスキャナーを使用することも、パイプラインやポリシー内のジョブを通じて外部スキャナーを使用することもできます。GitLabは、ガバナンスと実施のための単一プラットフォームとして機能し、独自のスキャナーを持ち込んで、DevSecOpsライフサイクルの早い段階で結果を確認できます。\n\n開始するには、セキュリティジョブを実行するだけで、マージリクエストと脆弱性レポートで結果を取得できます。\n\n## GitLab CIから外部スキャンを実行する\n\nこのパイプライン例では、テストステージで外部的にSnykスキャンを実行し、`gemnasium-maven-dependency_scanning`というオーバーライドしたジョブで実行します。まず、必要なパッケージ（npm、Maven、Python3、Snyk）をインストールし、次にプロジェクトの変数セクションに保存されたSNYK_TOKEN変数で認証します。最後に、Snyk CLIで`snyk test`コマンドを実行し、結果をJSONに出力します。これにより、結果がsnyk_data_file.jsonに保存され、次のセクションで詳しく説明するスクリプトで解析し、必要なアーティファクトファイル`gl-dependency-scanning-report.json`に保存します。\n\n```yaml\nstages:\n  - test\n\nvariables:\n\ninclude:\n  - template: Jobs/Dependency-Scanning.gitlab-ci.yml  \n\ngemnasium-maven-dependency_scanning:\n  image: node:latest\n  stage: test\n  services:\n  - openjdk:11-jre-slim-buster\n  before_script:\n    - apt-get update\n    - apt-get install default-jdk -y\n  script:\n    # Install npm, snyk, and maven\n    - npm install -g npm@latest\n    - npm install -g snyk\n    - npm install maven\n    - npm install python3\n    # Run snyk auth, snyk monitor, snyk test to break build and out report\n    - snyk auth $SNYK_TOKEN\n    - chmod +x mvnw\n    - snyk test --all-projects --json-file-output=snyk_data_file.json || true\n    - python3 convert-snyk-to-gitlab.py\n\n  # Save report to artifacts\n  artifacts:\n    when: always\n    paths: \n      - gl-dependency-scanning-report.json\n```\n\n### JSONの解析\n\n外部スキャナーからのスキャン結果をマージリクエストウィジェットで確認できます。これは、成功したセキュリティジョブのアーティファクトが適切に名前付けされている場合に可能です（例：`gl-dependency-scanning-report.json`）。\n\n以下は、Snyk JSON出力をGitLab JSON出力に変換するスクリプトの例です。この例では、Snykデータファイルを開き、脆弱性データをロードします。依存関係ファイルの新しいリストと、GitLabが脆弱性レコードに表示するために必要なデータ（識別子、重大度、カテゴリ、説明、場所など）を含む脆弱性の新しいリストを作成します。レコードに表示する必要のない必須フィールドには、いくつかのプレースホルダーセクションを追加しました。最後に、解析した内容を`gl-dependency-scanning-report.json`という新しいJSONファイルに保存しました。これは、GitLabがファイルを読み取り、その内容をウィジェットに表示するために必要なファイル名です。\n\n```text\nimport json\nfrom types import SimpleNamespace\n\nwith open(\"snyk_data_file.json\") as snyk_data_file:\n    snyk_data = json.load(snyk_data_file, object_hook=lambda d: SimpleNamespace(**d))\n\ngitlab_vulns = []\ndependency_files = []\nfor i in snyk_data:\n    dependency_files.append({\"path\": i.path, \"package_manager\": i.packageManager, \"dependencies\": []})\n    for v in i.vulnerabilities:\n        gitlab_identifiers = []\n        for vuln_type, vuln_names in v.identifiers.__dict__.items():\n            if vuln_names: \n                for vuln_name in vuln_names:\n                    gitlab_identifiers.append({\"type\": vuln_type, \"name\": vuln_name, \"value\": vuln_name.partition(\"-\")[2]})\n                gitlab_vulns.append({\"id\": v.id, \"category\": \"dependency_scanning\", \"severity\": v.severity.capitalize(), \"identifiers\": gitlab_identifiers, \"description\": v.description, \"location\": {\"file\": i.displayTargetFile, \"dependency\": {\"package\": {\"name\": \"PLACEHOLDER\"}, \"version\": \"PLACEHOLDER\"}}})\n\n# Dummy data for scan and dependency files \nfull_json = {\"version\": \"15.0.6\", \"dependency_files\": dependency_files, \"scan\": {\"analyzer\": {\"id\": \"snyk\", \"name\": \"Snyk\", \"vendor\": {\"name\": \"Snyk\"}, \"version\": \"1.0.2\"}, \"scanner\": {\"id\": \"my-snyk-scanner\", \"name\": \"My Snyk Scanner\", \"version\": \"1.0.2\", \"vendor\": {\"name\": \"Snyk\"}}, \"end_time\": \"2022-01-28T03:26:02\", \"start_time\": \"2020-01-28T03:26:02\", \"status\": \"success\", \"type\": \"dependency_scanning\"}, \"vulnerabilities\": gitlab_vulns}\n\nwith open(\"gl-dependency-scanning-report.json\", \"w\") as gitlab_file:\n    json.dump(full_json, gitlab_file, default=vars)\n```\n\nこれで、脆弱性の検出結果がマージリクエストウィジェットに表示されるようになります。\n\n![セキュリティスキャン検出](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098776/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750098776479.png)\n\n## SARIFとSARIFコンバーターとは\n\nSARIFは、静的解析ツールの出力用のファイル形式です。さまざまなセキュリティスキャナーを活用する際に非常に便利です。すべての出力が同じ形式でフォーマットされているためです。これにより、アプリケーションセキュリティに対する汎用的で再現可能、かつスケーラブルなアプローチが可能になります。\n\nコミュニティで管理されている[SARIFコンバーター](https://gitlab.com/ignis-build/sarif-converter)があり、SARIFファイルを取得して、取り込み可能なレポートに変換します。Snykを含む多くのスキャナーをサポートしています。このコンバーターは、SASTとコード品質の検出結果の両方で機能します。この記事では、SASTに焦点を当てます。\n\n### SARIFコンバーターを使用してSAST結果を取得する\n\nSARIF結果を活用するには、まず前の例と同様にSnykスキャンをトリガーしますが、出力をSARIFファイルに保存します。その後、前述のコンバーターを使用して、レポートとして保存する新しいJSONファイルを作成します。\n\n```yaml\nsnyk:\n  image: node:latest\n  stage: test\n  services:\n  - openjdk:11-jre-slim-buster\n  before_script:\n    - apt-get update\n    - apt-get install default-jdk -y\n    - wget -O sarif-converter https://gitlab.com/ignis-build/sarif-converter/-/releases/permalink/latest/downloads/bin/sarif-converter-linux\n    - chmod +x sarif-converter\n  script:\n    # Install npm, snyk, and maven\n    - npm install -g npm@latest\n    - npm install -g snyk\n    - npm install maven\n    # Run snyk auth, snyk monitor, snyk test to break build and out report\n    - snyk auth $SNYK_TOKEN\n    - chmod +x mvnw\n    - snyk test --all-projects --sarif-file-output=snyk.sarif  || true\n    - ./sarif-converter --type sast snyk.sarif snyk.json\n\n  artifacts:\n    reports:\n      sast: snyk.json\n```\n\nJSONをアーティファクトとして保存すると、結果がマージリクエストウィジェットに表示されます。\n\n![セキュリティスキャン - 画像2](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098776/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750098776479.png)\n\n## まとめ\n\nこの記事では、カスタムスクリプトとSARIFコンバーターの両方を使用して、GitLabマージリクエストウィジェットで外部スキャナーの脆弱性を表示する方法を説明しました。これらの操作は、示されているパイプラインから実行できるだけでなく、コンプライアンスパイプラインやパイプライン実行ポリシーからも実行できます。これらにより、外部スキャナーの強制実行が可能になります。GitLab Ultimateでは、完全なDevSecOpsプラットフォームにアクセスでき、当社のスキャナーを使用することも独自のスキャナーを持ち込むこともできます。これにより、デベロッパーが本番環境に到達する前に脆弱性を修正できるシフトレフトワークフローを構築できます。\n\n> GitLab Ultimateを今すぐ無料トライアルして、外部スキャナーの統合を開始しましょう。\n\n## セキュリティスキャンに関するその他のリソース\n\n* [セキュリティスキャナー統合ドキュメント](https://docs.gitlab.com/development/integrations/secure/)\n* [カスタムセキュリティスキャナーをGitLabに統合する方法](https://about.gitlab.com/ja-jp/blog/how-to-integrate-custom-security-scanners-into-gitlab/)\n* [GitLabトラストセンター](https://about.gitlab.com/ja-jp/security/)",[18],"Sam Morris","2026-02-12","2024-04-08","外部セキュリティスキャナーをDevSecOpsワークフローに統合する",[9,23,24],"tutorial","testing","SnykスキャンのJSON結果をマージリクエストウィジェットに統合し、SARIFファイル形式を活用する方法を紹介します。","yml",{},true,"/ja-jp/blog/integrate-external-security-scanners-into-your-devsecops-workflow",{"ogTitle":21,"ogImage":15,"ogDescription":25,"ogSiteName":31,"noIndex":12,"ogType":32,"ogUrl":33,"title":21,"canonicalUrls":33,"description":25},"https://about.gitlab.com","article","https://about.gitlab.com/ja-jp/blog/integrate-external-security-scanners-into-your-devsecops-workflow","ja-jp/blog/integrate-external-security-scanners-into-your-devsecops-workflow",[9,23,24],"M26j9aUr-sAcXx38G-D4_5cUlE6m7hNEhojedhLxoqw",{"data":38},{"logo":39,"freeTrial":44,"sales":49,"login":54,"items":59,"search":367,"minimal":400,"duo":417,"pricingDeployment":426},{"config":40},{"href":41,"dataGaName":42,"dataGaLocation":43},"/ja-jp/","gitlab logo","header",{"text":45,"config":46},"無料トライアルを開始",{"href":47,"dataGaName":48,"dataGaLocation":43},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp&glm_content=default-saas-trial/","free trial",{"text":50,"config":51},"お問い合わせ",{"href":52,"dataGaName":53,"dataGaLocation":43},"/ja-jp/sales/","sales",{"text":55,"config":56},"サインイン",{"href":57,"dataGaName":58,"dataGaLocation":43},"https://gitlab.com/users/sign_in/","sign in",[60,87,183,188,289,349],{"text":61,"config":62,"cards":64},"プラットフォーム",{"dataNavLevelOne":63},"platform",[65,71,79],{"title":61,"description":66,"link":67},"DevSecOpsに特化したインテリジェントオーケストレーションプラットフォーム",{"text":68,"config":69},"プラットフォームを詳しく見る",{"href":70,"dataGaName":63,"dataGaLocation":43},"/ja-jp/platform/",{"title":72,"description":73,"link":74},"GitLab Duo Agent Platform","ソフトウェアライフサイクル全体を支えるエージェント型AI",{"text":75,"config":76},"GitLab Duoのご紹介",{"href":77,"dataGaName":78,"dataGaLocation":43},"/ja-jp/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":80,"description":81,"link":82},"GitLabが選ばれる理由","エンタープライズがGitLabを選ぶ主な理由をご覧ください",{"text":83,"config":84},"詳細はこちら",{"href":85,"dataGaName":86,"dataGaLocation":43},"/ja-jp/why-gitlab/","why gitlab",{"text":88,"left":28,"config":89,"link":91,"lists":95,"footer":165},"製品",{"dataNavLevelOne":90},"solutions",{"text":92,"config":93},"すべてのソリューションを表示",{"href":94,"dataGaName":90,"dataGaLocation":43},"/ja-jp/solutions/",[96,121,143],{"title":97,"description":98,"link":99,"items":104},"自動化","CI/CDと自動化でデプロイを加速",{"config":100},{"icon":101,"href":102,"dataGaName":103,"dataGaLocation":43},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[105,109,112,117],{"text":106,"config":107},"CI/CD",{"href":108,"dataGaLocation":43,"dataGaName":106},"/ja-jp/solutions/continuous-integration/",{"text":72,"config":110},{"href":77,"dataGaLocation":43,"dataGaName":111},"gitlab duo agent platform - product menu",{"text":113,"config":114},"ソースコード管理",{"href":115,"dataGaLocation":43,"dataGaName":116},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":118,"config":119},"自動化されたソフトウェアデリバリー",{"href":102,"dataGaLocation":43,"dataGaName":120},"Automated software delivery",{"title":122,"description":123,"link":124,"items":129},"セキュリティ","セキュリティを犠牲にすることなくコード作成を高速化",{"config":125},{"href":126,"dataGaName":127,"dataGaLocation":43,"icon":128},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[130,134,139],{"text":131,"config":132},"Application Security Testing",{"href":126,"dataGaName":133,"dataGaLocation":43},"Application security testing",{"text":135,"config":136},"ソフトウェアサプライチェーンの安全性",{"href":137,"dataGaLocation":43,"dataGaName":138},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":140,"config":141},"Software Compliance",{"href":142,"dataGaName":140,"dataGaLocation":43},"/ja-jp/solutions/software-compliance/",{"title":144,"link":145,"items":150},"測定",{"config":146},{"icon":147,"href":148,"dataGaName":149,"dataGaLocation":43},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[151,155,160],{"text":152,"config":153},"可視性と測定",{"href":148,"dataGaLocation":43,"dataGaName":154},"Visibility and Measurement",{"text":156,"config":157},"バリューストリーム管理",{"href":158,"dataGaLocation":43,"dataGaName":159},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":161,"config":162},"分析とインサイト",{"href":163,"dataGaLocation":43,"dataGaName":164},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":166,"items":167},"GitLabが活躍する場所",[168,173,178],{"text":169,"config":170},"Enterprise",{"href":171,"dataGaLocation":43,"dataGaName":172},"/ja-jp/enterprise/","enterprise",{"text":174,"config":175},"スモールビジネス",{"href":176,"dataGaLocation":43,"dataGaName":177},"/ja-jp/small-business/","small business",{"text":179,"config":180},"公共機関",{"href":181,"dataGaLocation":43,"dataGaName":182},"/ja-jp/solutions/public-sector/","public sector",{"text":184,"config":185},"価格",{"href":186,"dataGaName":187,"dataGaLocation":43,"dataNavLevelOne":187},"/ja-jp/pricing/","pricing",{"text":189,"config":190,"link":192,"lists":196,"feature":276},"関連リソース",{"dataNavLevelOne":191},"resources",{"text":193,"config":194},"すべてのリソースを表示",{"href":195,"dataGaName":191,"dataGaLocation":43},"/ja-jp/resources/",[197,230,248],{"title":198,"items":199},"はじめに",[200,205,210,215,220,225],{"text":201,"config":202},"インストール",{"href":203,"dataGaName":204,"dataGaLocation":43},"/ja-jp/install/","install",{"text":206,"config":207},"クイックスタートガイド",{"href":208,"dataGaName":209,"dataGaLocation":43},"/ja-jp/get-started/","quick setup checklists",{"text":211,"config":212},"学ぶ",{"href":213,"dataGaLocation":43,"dataGaName":214},"https://university.gitlab.com/","learn",{"text":216,"config":217},"製品ドキュメント",{"href":218,"dataGaName":219,"dataGaLocation":43},"https://docs.gitlab.com/","product documentation",{"text":221,"config":222},"ベストプラクティスビデオ",{"href":223,"dataGaName":224,"dataGaLocation":43},"/ja-jp/getting-started-videos/","best practice videos",{"text":226,"config":227},"インテグレーション",{"href":228,"dataGaName":229,"dataGaLocation":43},"/ja-jp/integrations/","integrations",{"title":231,"items":232},"検索する",[233,238,243],{"text":234,"config":235},"お客様成功事例",{"href":236,"dataGaName":237,"dataGaLocation":43},"/ja-jp/customers/","customer success stories",{"text":239,"config":240},"ブログ",{"href":241,"dataGaName":242,"dataGaLocation":43},"/ja-jp/blog/","blog",{"text":244,"config":245},"リモート",{"href":246,"dataGaName":247,"dataGaLocation":43},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":249,"items":250},"つなげる",[251,256,261,266,271],{"text":252,"config":253},"GitLabサービス",{"href":254,"dataGaName":255,"dataGaLocation":43},"/ja-jp/services/","services",{"text":257,"config":258},"コミュニティ",{"href":259,"dataGaName":260,"dataGaLocation":43},"/community/","community",{"text":262,"config":263},"フォーラム",{"href":264,"dataGaName":265,"dataGaLocation":43},"https://forum.gitlab.com/","forum",{"text":267,"config":268},"イベント",{"href":269,"dataGaName":270,"dataGaLocation":43},"/events/","events",{"text":272,"config":273},"パートナー",{"href":274,"dataGaName":275,"dataGaLocation":43},"/ja-jp/partners/","partners",{"backgroundColor":277,"textColor":278,"text":279,"image":280,"link":284},"#2f2a6b","#fff","ソフトウェア開発の未来への洞察",{"altText":281,"config":282},"ソースプロモカード",{"src":283},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":285,"config":286},"最新情報を読む",{"href":287,"dataGaName":288,"dataGaLocation":43},"/ja-jp/the-source/","the source",{"text":290,"config":291,"lists":293},"会社情報",{"dataNavLevelOne":292},"company",[294],{"items":295},[296,301,307,309,314,319,324,329,334,339,344],{"text":297,"config":298},"GitLabについて",{"href":299,"dataGaName":300,"dataGaLocation":43},"/ja-jp/company/","about",{"text":302,"config":303,"footerGa":306},"採用情報",{"href":304,"dataGaName":305,"dataGaLocation":43},"/jobs/","jobs",{"dataGaName":305},{"text":267,"config":308},{"href":269,"dataGaName":270,"dataGaLocation":43},{"text":310,"config":311},"経営陣",{"href":312,"dataGaName":313,"dataGaLocation":43},"/company/team/e-group/","leadership",{"text":315,"config":316},"チーム",{"href":317,"dataGaName":318,"dataGaLocation":43},"/company/team/","team",{"text":320,"config":321},"ハンドブック",{"href":322,"dataGaName":323,"dataGaLocation":43},"https://handbook.gitlab.com/","handbook",{"text":325,"config":326},"投資家向け情報",{"href":327,"dataGaName":328,"dataGaLocation":43},"https://ir.gitlab.com/","investor relations",{"text":330,"config":331},"トラストセンター",{"href":332,"dataGaName":333,"dataGaLocation":43},"/ja-jp/security/","trust center",{"text":335,"config":336},"AI Transparency Center",{"href":337,"dataGaName":338,"dataGaLocation":43},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":340,"config":341},"ニュースレター",{"href":342,"dataGaName":343,"dataGaLocation":43},"/company/contact/#contact-forms","newsletter",{"text":345,"config":346},"プレス",{"href":347,"dataGaName":348,"dataGaLocation":43},"/press/","press",{"text":50,"config":350,"lists":351},{"dataNavLevelOne":292},[352],{"items":353},[354,357,362],{"text":50,"config":355},{"href":52,"dataGaName":356,"dataGaLocation":43},"talk to sales",{"text":358,"config":359},"サポートポータル",{"href":360,"dataGaName":361,"dataGaLocation":43},"https://support.gitlab.com","support portal",{"text":363,"config":364},"カスタマーポータル",{"href":365,"dataGaName":366,"dataGaLocation":43},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":368,"login":369,"suggestions":376},"閉じる",{"text":370,"link":371},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":372,"config":373},"GitLab.com",{"href":57,"dataGaName":374,"dataGaLocation":375},"search login","search",{"text":377,"default":378},"提案",[379,381,386,388,392,396],{"text":72,"config":380},{"href":77,"dataGaName":72,"dataGaLocation":375},{"text":382,"config":383},"コード提案（AI）",{"href":384,"dataGaName":385,"dataGaLocation":375},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":106,"config":387},{"href":108,"dataGaName":106,"dataGaLocation":375},{"text":389,"config":390},"GitLab on AWS",{"href":391,"dataGaName":389,"dataGaLocation":375},"/ja-jp/partners/technology-partners/aws/",{"text":393,"config":394},"GitLab on Google Cloud",{"href":395,"dataGaName":393,"dataGaLocation":375},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":397,"config":398},"GitLabを選ぶ理由",{"href":85,"dataGaName":399,"dataGaLocation":375},"Why GitLab?",{"freeTrial":401,"mobileIcon":405,"desktopIcon":410,"secondaryButton":413},{"text":45,"config":402},{"href":403,"dataGaName":48,"dataGaLocation":404},"https://gitlab.com/-/trials/new/","nav",{"altText":406,"config":407},"GitLabアイコン",{"src":408,"dataGaName":409,"dataGaLocation":404},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":406,"config":411},{"src":412,"dataGaName":409,"dataGaLocation":404},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":198,"config":414},{"href":415,"dataGaName":416,"dataGaLocation":404},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp/get-started/","get started",{"freeTrial":418,"mobileIcon":422,"desktopIcon":424},{"text":419,"config":420},"GitLab Duoの詳細について",{"href":77,"dataGaName":421,"dataGaLocation":404},"gitlab duo",{"altText":406,"config":423},{"src":408,"dataGaName":409,"dataGaLocation":404},{"altText":406,"config":425},{"src":412,"dataGaName":409,"dataGaLocation":404},{"freeTrial":427,"mobileIcon":432,"desktopIcon":434},{"text":428,"config":429},"料金ページに戻る",{"href":186,"dataGaName":430,"dataGaLocation":404,"icon":431},"back to pricing","GoBack",{"altText":406,"config":433},{"src":408,"dataGaName":409,"dataGaLocation":404},{"altText":406,"config":435},{"src":412,"dataGaName":409,"dataGaLocation":404},{"title":437,"button":438,"config":443},"エージェント型AIがソフトウェア配信をどのように変革するかをご覧ください",{"text":439,"config":440},"GitLab Transcendを今すぐ視聴",{"href":441,"dataGaName":442,"dataGaLocation":43},"/ja-jp/events/transcend/virtual/","transcend event",{"layout":444,"icon":445,"disabled":28},"release","AiStar",{"data":447},{"text":448,"source":449,"edit":455,"contribute":460,"config":465,"items":470,"minimal":644},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":450,"config":451},"ページのソースを表示",{"href":452,"dataGaName":453,"dataGaLocation":454},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":456,"config":457},"このページを編集",{"href":458,"dataGaName":459,"dataGaLocation":454},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":461,"config":462},"ご協力をお願いします",{"href":463,"dataGaName":464,"dataGaLocation":454},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":466,"facebook":467,"youtube":468,"linkedin":469},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[471,494,548,578,613],{"title":61,"links":472,"subMenu":477},[473],{"text":474,"config":475},"DevSecOpsプラットフォーム",{"href":70,"dataGaName":476,"dataGaLocation":454},"devsecops platform",[478],{"title":184,"links":479},[480,484,489],{"text":481,"config":482},"プランの表示",{"href":186,"dataGaName":483,"dataGaLocation":454},"view plans",{"text":485,"config":486},"Premiumを選ぶ理由",{"href":487,"dataGaName":488,"dataGaLocation":454},"/ja-jp/pricing/premium/","why premium",{"text":490,"config":491},"Ultimateを選ぶ理由",{"href":492,"dataGaName":493,"dataGaLocation":454},"/ja-jp/pricing/ultimate/","why ultimate",{"title":495,"links":496},"ソリューション",[497,502,505,507,512,517,521,524,527,532,534,536,538,543],{"text":498,"config":499},"デジタルトランスフォーメーション",{"href":500,"dataGaName":501,"dataGaLocation":454},"/ja-jp/topics/digital-transformation/","digital transformation",{"text":503,"config":504},"セキュリティとコンプライアンス",{"href":126,"dataGaName":133,"dataGaLocation":454},{"text":118,"config":506},{"href":102,"dataGaName":103,"dataGaLocation":454},{"text":508,"config":509},"アジャイル開発",{"href":510,"dataGaName":511,"dataGaLocation":454},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":513,"config":514},"クラウドトランスフォーメーション",{"href":515,"dataGaName":516,"dataGaLocation":454},"/ja-jp/topics/cloud-native/","cloud transformation",{"text":518,"config":519},"SCM",{"href":115,"dataGaName":520,"dataGaLocation":454},"source code management",{"text":106,"config":522},{"href":108,"dataGaName":523,"dataGaLocation":454},"continuous integration & delivery",{"text":156,"config":525},{"href":158,"dataGaName":526,"dataGaLocation":454},"value stream management",{"text":528,"config":529},"GitOps",{"href":530,"dataGaName":531,"dataGaLocation":454},"/ja-jp/solutions/gitops/","gitops",{"text":169,"config":533},{"href":171,"dataGaName":172,"dataGaLocation":454},{"text":174,"config":535},{"href":176,"dataGaName":177,"dataGaLocation":454},{"text":179,"config":537},{"href":181,"dataGaName":182,"dataGaLocation":454},{"text":539,"config":540},"教育",{"href":541,"dataGaName":542,"dataGaLocation":454},"/ja-jp/solutions/education/","education",{"text":544,"config":545},"金融サービス",{"href":546,"dataGaName":547,"dataGaLocation":454},"/ja-jp/solutions/finance/","financial services",{"title":189,"links":549},[550,552,554,556,559,561,564,566,568,570,572,574,576],{"text":201,"config":551},{"href":203,"dataGaName":204,"dataGaLocation":454},{"text":206,"config":553},{"href":208,"dataGaName":209,"dataGaLocation":454},{"text":211,"config":555},{"href":213,"dataGaName":214,"dataGaLocation":454},{"text":216,"config":557},{"href":218,"dataGaName":558,"dataGaLocation":454},"docs",{"text":239,"config":560},{"href":241,"dataGaName":242},{"text":562,"config":563},"お客様の成功事例",{"href":236,"dataGaLocation":454},{"text":234,"config":565},{"href":236,"dataGaName":237,"dataGaLocation":454},{"text":244,"config":567},{"href":246,"dataGaName":247,"dataGaLocation":454},{"text":252,"config":569},{"href":254,"dataGaName":255,"dataGaLocation":454},{"text":257,"config":571},{"href":259,"dataGaName":260,"dataGaLocation":454},{"text":262,"config":573},{"href":264,"dataGaName":265,"dataGaLocation":454},{"text":267,"config":575},{"href":269,"dataGaName":270,"dataGaLocation":454},{"text":272,"config":577},{"href":274,"dataGaName":275,"dataGaLocation":454},{"title":579,"links":580},"Company",[581,583,585,587,589,591,593,597,602,604,606,608],{"text":297,"config":582},{"href":299,"dataGaName":292,"dataGaLocation":454},{"text":302,"config":584},{"href":304,"dataGaName":305,"dataGaLocation":454},{"text":310,"config":586},{"href":312,"dataGaName":313,"dataGaLocation":454},{"text":315,"config":588},{"href":317,"dataGaName":318,"dataGaLocation":454},{"text":320,"config":590},{"href":322,"dataGaName":323,"dataGaLocation":454},{"text":325,"config":592},{"href":327,"dataGaName":328,"dataGaLocation":454},{"text":594,"config":595},"Sustainability",{"href":596,"dataGaName":594,"dataGaLocation":454},"/sustainability/",{"text":598,"config":599},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":600,"dataGaName":601,"dataGaLocation":454},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":330,"config":603},{"href":332,"dataGaName":333,"dataGaLocation":454},{"text":340,"config":605},{"href":342,"dataGaName":343,"dataGaLocation":454},{"text":345,"config":607},{"href":347,"dataGaName":348,"dataGaLocation":454},{"text":609,"config":610},"現代奴隷制の透明性に関する声明",{"href":611,"dataGaName":612,"dataGaLocation":454},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":50,"links":614},[615,617,622,624,629,634,639],{"text":50,"config":616},{"href":52,"dataGaName":53,"dataGaLocation":454},{"text":618,"config":619},"サポートを受ける",{"href":620,"dataGaName":621,"dataGaLocation":454},"https://support.gitlab.com/hc/en-us/articles/11626483177756-GitLab-Support","get help",{"text":363,"config":623},{"href":365,"dataGaName":366,"dataGaLocation":454},{"text":625,"config":626},"ステータス",{"href":627,"dataGaName":628,"dataGaLocation":454},"https://status.gitlab.com/","status",{"text":630,"config":631},"利用規約",{"href":632,"dataGaName":633,"dataGaLocation":454},"/terms/","terms of use",{"text":635,"config":636},"プライバシーに関する声明",{"href":637,"dataGaName":638,"dataGaLocation":454},"/ja-jp/privacy/","privacy statement",{"text":640,"config":641},"Cookieの設定",{"dataGaName":642,"dataGaLocation":454,"id":643,"isOneTrustButton":28},"cookie preferences","ot-sdk-btn",{"items":645},[646,648,650],{"text":630,"config":647},{"href":632,"dataGaName":633,"dataGaLocation":454},{"text":635,"config":649},{"href":637,"dataGaName":638,"dataGaLocation":454},{"text":640,"config":651},{"dataGaName":642,"dataGaLocation":454,"id":643,"isOneTrustButton":28},[653],{"id":654,"title":18,"body":8,"config":655,"content":657,"description":8,"extension":26,"meta":661,"navigation":28,"path":662,"seo":663,"stem":664,"__hash__":665},"blogAuthors/en-us/blog/authors/sam-morris.yml",{"template":656},"BlogAuthor",{"name":18,"config":658},{"headshot":659,"ctfId":660},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660148/Blog/Author%20Headshots/sam_morris.png","6JTrhUIqSCU30Y9KZOaan8",{},"/en-us/blog/authors/sam-morris",{},"en-us/blog/authors/sam-morris","DfL241G6FQ5wNU6XYJLCEQLvnWBnyKnAi3wCPxOqBzE",[667,680,693],{"content":668,"config":678},{"heroImage":669,"body":670,"authors":671,"updatedDate":673,"date":674,"title":675,"tags":676,"description":677,"category":9},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772721753/frfsm1qfscwrmsyzj1qn.png","コンテナの脆弱性は、次のデプロイメントを待ってくれるわけではありません。イメージのビルド時や、コンテナが本番環境で稼働している間など、あらゆるタイミングで発生する可能性があります。\nGitLab はこうした現実に対応するため、コンテナライフサイクルのさまざまな段階に対応した複数のコンテナスキャンアプローチを提供しています。\n\n本ガイドでは、GitLab が提供するコンテナスキャンの種類、各機能の有効化方法、および初期設定に役立つ一般的な構成についてご説明します。\n\n## コンテナスキャンが重要な理由\n\nコンテナイメージのセキュリティ脆弱性は、アプリケーションライフサイクル全体にわたってリスクをもたらします。ベースイメージ、OSパッケージ、アプリケーションの依存関係はいずれも、攻撃者が積極的に悪用する脆弱性を含んでいる可能性があります。コンテナスキャンはこれらのリスクを早期に、本番環境に到達する前に検出し、利用可能な場合は修正方法を提供します。\n\nコンテナスキャンはソフトウェアコンポジション分析（SCA）の重要なコンポーネントであり、コンテナ化されたアプリケーションが依存する外部依存関係を把握し、保護するために役立ちます。\n\n## GitLab コンテナスキャンの5つの種類\n\nGitLab は5つの異なるコンテナスキャンアプローチを提供しており、それぞれがセキュリティ戦略において固有の目的を果たします。\n\n### 1. パイプラインベースのコンテナスキャン\n\n* 機能：CI/CDパイプラインの実行中にコンテナイメージをスキャンし、デプロイ前に脆弱性を検出します。\n* 最適な用途：シフトレフトセキュリティ、脆弱性のあるイメージが本番環境に到達するのを防止\n* 利用可能なプラン：Free、Premium、Ultimate（Ultimateではより高度な機能を利用可能）\n* [ドキュメント](https://docs.gitlab.com/ja-jp/user/application_security/container_scanning/)\n\nGitLab は Trivy セキュリティスキャナーを使用してコンテナイメージの既知の脆弱性を分析します。パイプラインの実行時にスキャナーがイメージを検査し、詳細なレポートを生成します。\n\n#### パイプラインベースのコンテナスキャンを有効にする方法\n\n**オプション A：事前設定済みのマージリクエスト**\n\n* プロジェクトで **Secure > セキュリティ設定** に移動します。\n* 「コンテナスキャン」の行を見つけます。\n* **マージリクエストで設定** を選択します。\n* 必要な設定を含むマージリクエストが自動的に作成されます。\n\n**オプション B：手動設定**\n\n* `.gitlab-ci.yml` に以下を追加します。\n\n```yaml\ninclude:\n  - template: Jobs/Container-Scanning.gitlab-ci.yml\n```\n\n#### 一般的な設定\n\n**特定のイメージをスキャンする：**\n\n特定のイメージをスキャンするには、`container_scanning` ジョブの `CS_IMAGE` 変数を上書きします。\n\n```yaml\ninclude:\n  - template: Jobs/Container-Scanning.gitlab-ci.yml\n\ncontainer_scanning:\n  variables:\n    CS_IMAGE: myregistry.com/myapp:latest\n```\n\n**重大度のしきい値でフィルタリングする：**\n\n特定の重大度基準を持つ脆弱性のみを検出するには、`container_scanning` ジョブの `CS_SEVERITY_THRESHOLD` 変数を上書きします。以下の例では、重大度が **High** 以上の脆弱性のみが表示されます。\n\n```yaml\ninclude:\n  - template: Jobs/Container-Scanning.gitlab-ci.yml\n\ncontainer_scanning:\n  variables:\n    CS_SEVERITY_THRESHOLD: \"HIGH\"\n```\n\n#### マージリクエストでの脆弱性の確認\n\nマージリクエスト内でコンテナスキャンの脆弱性を直接確認することで、セキュリティレビューをシームレスかつ効率的に実施できます。CI/CDパイプラインにコンテナスキャンを設定すると、GitLab はマージリクエストの[セキュリティウィジェット](https://docs.gitlab.com/ja-jp/user/project/merge_requests/widgets/#application-security-scanning)に検出された脆弱性を自動的に表示します。\n\n![マージリクエストに表示されたコンテナスキャンの脆弱性](https://res.cloudinary.com/about-gitlab-com/image/upload/v1772547514/lt6elcq6jexdhqatdy8l.png \"マージリクエストに表示されたコンテナスキャンの脆弱性\")\n\n* マージリクエストの「セキュリティスキャン」セクションまでスクロールすると、コンテナイメージで新たに検出された脆弱性と既存の脆弱性の概要が確認できます。\n* **脆弱性** をクリックすると、重大度レベル、影響を受けるパッケージ、利用可能な修正ガイダンスなど、検出内容の詳細情報にアクセスできます。\n\n![GitLab セキュリティ - MRでの詳細表示](https://res.cloudinary.com/about-gitlab-com/image/upload/v1772547514/hplihdlekc11uvpfih1p.png)\n\n![GitLab セキュリティ - MRでの詳細表示](https://res.cloudinary.com/about-gitlab-com/image/upload/v1772547513/jnxbe7uld8wfeezboifs.png \"MRでのコンテナスキャン脆弱性の詳細\")\n\nこの可視性により、開発者とセキュリティチームはコンテナの脆弱性が本番環境に到達する前に発見・対処できるようになり、セキュリティがコードレビュープロセスに統合されます。\n\n#### 脆弱性レポートでの脆弱性の確認\n\nマージリクエストのレビューに加え、GitLab はプロジェクト内のすべてのコンテナスキャン結果を一元的に確認できる[脆弱性レポート](https://docs.gitlab.com/ja-jp/user/application_security/vulnerability_report/)を提供しており、セキュリティチームに包括的な可視性をもたらします。\n\n![コンテナスキャンでフィルタリングされた脆弱性レポート](https://res.cloudinary.com/about-gitlab-com/image/upload/v1772547524/gagau279fzfgjpnvipm5.png \"コンテナスキャンでフィルタリングされた脆弱性レポート\")\n\n* プロジェクトのサイドバーで **セキュリティとコンプライアンス > 脆弱性レポート** に移動してレポートにアクセスします。\n* ここでは、ブランチ全体で検出されたすべてのコンテナ脆弱性が集約されて表示され、重大度、ステータス、スキャナーの種類、特定のコンテナイメージでフィルタリングする強力なオプションが利用できます。\n* 脆弱性をクリックすると、脆弱性ページにアクセスできます。\n\n![脆弱性ページ - 1番目のビュー](https://res.cloudinary.com/about-gitlab-com/image/upload/v1772547520/e1woxupyoajhrpzrlylj.png)\n\n![脆弱性ページ - 2番目のビュー](https://res.cloudinary.com/about-gitlab-com/image/upload/v1772547521/idzcftcgjc8eryixnbjn.png)\n\n![脆弱性ページ - 3番目のビュー](https://res.cloudinary.com/about-gitlab-com/image/upload/v1772547522/mbbwbbprtf9anqqola10.png \"コンテナスキャン脆弱性の詳細\")\n\n[脆弱性の詳細](https://docs.gitlab.com/ja-jp/user/application_security/vulnerabilities/)では、影響を受けるコンテナイメージとレイヤーが正確に示されるため、脆弱性の発生源を容易に追跡できます。脆弱性をチームメンバーに割り当て、ステータスを変更（検出済み、確認済み、解決済み、却下済み）し、コラボレーションのためのコメントを追加し、修正作業の追跡のために関連するイシューをリンクすることができます。\n\nこのワークフローにより、脆弱性管理がスプレッドシートによる管理から開発プロセスの一部へと変わり、コンテナセキュリティの検出結果が体系的に追跡・優先順位付け・解決されるようになります。\n\n#### 依存関係リストの確認\n\nGitLab の[依存関係リスト](https://docs.gitlab.com/ja-jp/user/application_security/dependency_list/)は、コンテナイメージ内のすべてのコンポーネントをカタログ化した包括的なソフトウェア部品表（SBOM）を提供し、ソフトウェアサプライチェーンの完全な透明性をもたらします。\n\n* **セキュリティとコンプライアンス > 依存関係リスト** に移動すると、プロジェクト全体でコンテナスキャンが検出したすべてのパッケージ、ライブラリ、依存関係のインベントリにアクセスできます。\n* このビューは、ベースOSパッケージからアプリケーションレベルの依存関係まで、コンテナ内で実際に稼働しているものを把握するために非常に役立ちます。\n\n![GitLab 依存関係リスト](https://res.cloudinary.com/about-gitlab-com/image/upload/v1772547513/vjg6dk3nhajqamplroji.png \"GitLab 依存関係リスト（SBOM）\")\n\nパッケージマネージャー、ライセンスの種類、または脆弱性のステータスでリストをフィルタリングすることで、セキュリティリスクやコンプライアンス上の問題をもたらすコンポーネントを素早く特定できます。各依存関係エントリには関連する脆弱性が表示されるため、単独の検出結果としてではなく、実際のソフトウェアコンポーネントのコンテキストでセキュリティの問題を把握できます。\n\n### 2. レジストリ向けコンテナスキャン\n\n* 機能：`latest` タグで GitLab コンテナレジストリにプッシュされたイメージを自動的にスキャンします。\n* 最適な用途：手動のパイプラインを実行することなく、レジストリイメージの継続的なモニタリングを実施\n* 利用可能なプラン：Ultimate のみ\n* [ドキュメント](https://docs.gitlab.com/ja-jp/user/application_security/container_scanning/#container-scanning-for-registry)\n\n`latest` タグが付いたコンテナイメージをプッシュすると、GitLab のセキュリティポリシーボットがデフォルトブランチに対してスキャンを自動的にトリガーします。パイプラインベースのスキャンとは異なり、このアプローチは継続的脆弱性スキャンと連携して、新たに公開されたアドバイザリーを監視します。\n\n#### レジストリ向けコンテナスキャンを有効にする方法\n\n1. **Secure > セキュリティ設定** に移動します。\n2. **レジストリ向けコンテナスキャン** セクションまでスクロールします。\n3. 機能をオンに切り替えます。\n\n![レジストリ向けコンテナスキャン](https://res.cloudinary.com/about-gitlab-com/image/upload/v1772547512/vntrlhtmsh1ecnwni5ji.png \"レジストリ向けコンテナスキャンの切り替えスイッチ\")\n\n#### 前提条件\n\n* プロジェクトのメンテナーロール以上\n* プロジェクトが空でないこと（デフォルトブランチに少なくとも1つのコミットが必要）\n* コンテナレジストリの通知が設定済みであること\n* パッケージメタデータデータベースが設定済みであること（GitLab.com ではデフォルトで有効）\n\n脆弱性は脆弱性レポートの **コンテナレジストリの脆弱性** タブに表示されます。\n\n### 3. マルチコンテナスキャン\n\n* 機能：単一のパイプライン内で複数のコンテナイメージを並行してスキャンします。\n* 最適な用途：マイクロサービスアーキテクチャや複数のコンテナイメージを持つプロジェクト\n* 利用可能なプラン：Free、Premium、Ultimate（現在ベータ版）\n* [ドキュメント](https://docs.gitlab.com/ja-jp/user/application_security/container_scanning/multi_container_scanning/)\n\nマルチコンテナスキャンは動的な子パイプラインを使用してスキャンを並行実行するため、複数のイメージをスキャンする際のパイプライン全体の実行時間を大幅に短縮できます。\n\n#### マルチコンテナスキャンを有効にする方法\n\n1. リポジトリのルートに `.gitlab-multi-image.yml` ファイルを作成します。\n\n```yaml\nscanTargets:\n  - name: alpine\n    tag: \"3.19\"\n  - name: python\n    tag: \"3.9-slim\"\n  - name: nginx\n    tag: \"1.25\"\n```\n\n2. `.gitlab-ci.yml` にテンプレートを追加します。\n\n```yaml\ninclude:\n  - template: Jobs/Multi-Container-Scanning.latest.gitlab-ci.yml\n```\n\n#### 詳細設定\n\n**プライベートレジストリからイメージをスキャンする：**\n\n```yaml\nauths:\n  registry.gitlab.com:\n    username: ${CI_REGISTRY_USER}\n    password: ${CI_REGISTRY_PASSWORD}\n\nscanTargets:\n  - name: registry.gitlab.com/private/image\n    tag: latest\n```\n\n**ライセンス情報を含める：**\n\n```yaml\nincludeLicenses: true\n\nscanTargets:\n  - name: postgres\n    tag: \"15-alpine\"\n```\n\n### 4. 継続的脆弱性スキャン\n\n* 機能：パイプラインを実行することなく、新しいセキュリティアドバイザリーが公開された際に自動的に脆弱性を作成します。\n* 最適な用途：デプロイ間のプロアクティブなセキュリティモニタリング\n* 利用可能なプラン：Ultimate のみ\n* [ドキュメント](https://docs.gitlab.com/ja-jp/user/application_security/continuous_vulnerability_scanning/)\n\n従来のスキャンは、スキャン実行時の脆弱性しか検出できません。しかし、昨日スキャンしたパッケージに対して、明日新しい CVE が公開された場合はどうなるでしょうか。継続的脆弱性スキャンは、GitLab アドバイザリーデータベースを監視し、新しいアドバイザリーがコンポーネントに影響を与える際に自動的に脆弱性レコードを作成することでこの課題を解決します。\n\n#### 仕組み\n\n1. コンテナスキャンまたは依存関係スキャンジョブが CycloneDX SBOM を生成します。\n2. GitLab はこの SBOM からプロジェクトのコンポーネントを登録します。\n3. 新しいアドバイザリーが公開されると、GitLab はコンポーネントが影響を受けるかどうかを確認します。\n4. 脆弱性レポートに脆弱性が自動的に作成されます。\n\n#### 重要な考慮事項\n\n* スキャンは CI パイプラインではなく、バックグラウンドジョブ（Sidekiq）経由で実行されます。\n* 新しいコンポーネント検出には、過去14日以内に公開されたアドバイザリーのみが対象となります。\n* 脆弱性では「GitLab SBoM Vulnerability Scanner」がスキャナー名として使用されます。\n* 脆弱性を解決済みとしてマークするには、引き続きパイプラインベースのスキャンを実行する必要があります。\n\n### 5. 運用コンテナスキャン\n\n* 機能：スケジュールされた間隔で Kubernetes クラスター内の稼働中のコンテナをスキャンします。\n* 最適な用途：デプロイ後のセキュリティモニタリングとランタイム脆弱性の検出\n* 利用可能なプラン：Ultimate のみ\n* [ドキュメント](https://docs.gitlab.com/ja-jp/user/clusters/agent/vulnerabilities/)\n\n運用コンテナスキャンは、ビルド時のセキュリティとランタイムセキュリティの間のギャップを埋めます。GitLab Agent for Kubernetes を使用して、クラスター内で実際に稼働しているコンテナをスキャンし、デプロイ後に発生する脆弱性を検出します。\n\n#### 運用コンテナスキャンを有効にする方法\n\n[GitLab Kubernetes Agent](https://docs.gitlab.com/ja-jp/user/clusters/agent/install/) を使用している場合、エージェント設定ファイルに以下を追加できます。\n\n```yaml\ncontainer_scanning:\n  cadence: '0 0 * * *'  # 毎日深夜0時\n  vulnerability_report:\n    namespaces:\n      include:\n        - production\n        - staging\n```\n\nまた、GitLab Kubernetes Agent によるスケジュールスキャンを強制する[スキャン実行ポリシー](https://docs.gitlab.com/ja-jp/user/clusters/agent/vulnerabilities/#enable-via-scan-execution-policies)を作成することもできます。\n\n![スキャン実行ポリシー - 運用コンテナスキャン](https://res.cloudinary.com/about-gitlab-com/image/upload/v1772547515/gsgvjcq4sas4dfc8ciqk.png \"運用コンテナスキャンのスキャン実行ポリシー条件\")\n\n#### 結果の確認\n\n* **運用 > Kubernetes クラスター** に移動します。\n* **エージェント** タブを選択し、エージェントを選択します。\n* **セキュリティ** タブを選択してクラスターの脆弱性を確認します。\n* 結果は **脆弱性レポート** の **運用上の脆弱性** タブにも表示されます。\n\n## GitLab セキュリティポリシーによるセキュリティ態勢の強化\n\nGitLab セキュリティポリシーを使用すると、自動化されたポリシー駆動型のコントロールを通じて、コンテナワークフロー全体で一貫したセキュリティ標準を適用できます。これらのポリシーは、要件を開発パイプラインに直接組み込むことでセキュリティをシフトレフトし、コードが本番環境に到達する前に脆弱性を検出・対処できるようにします。\n\n#### スキャン実行ポリシーとパイプラインポリシー\n\n[スキャン実行ポリシー](https://docs.gitlab.com/ja-jp/user/application_security/policies/scan_execution_policies/)は、プロジェクト全体でコンテナスキャンがいつ・どのように実行されるかを自動化します。すべてのマージリクエストでコンテナスキャンをトリガーし、メインブランチの定期的なスキャンをスケジュールするポリシーなどを定義できます。これらのポリシーにより、各プロジェクトの CI/CD パイプラインで手動でスキャンを設定することなく、包括的なカバレッジが確保されます。\n\n使用するスキャナーのバージョンを指定し、スキャンパラメーターを一元的に設定することで、新しいコンテナセキュリティの脅威に対応しながら組織全体の一貫性を維持できます。\n\n![スキャン実行ポリシーの設定](https://res.cloudinary.com/about-gitlab-com/image/upload/v1772547517/z36dntxslqem9udrynvx.png \"スキャン実行ポリシーの設定\")\n\n[パイプライン実行ポリシー](https://docs.gitlab.com/ja-jp/user/application_security/policies/pipeline_execution_policies/)は、コンプライアンス要件に基づいてパイプラインにカスタムジョブを注入（または上書き）するための柔軟なコントロールを提供します。\n\nこれらのポリシーを使用して、コンテナスキャンジョブをパイプラインに自動的に注入したり、コンテナの脆弱性がリスク許容度を超えた場合にビルドを失敗させたり、特定のブランチやタグに対して追加のセキュリティチェックをトリガーしたり、本番環境向けコンテナイメージのコンプライアンス要件を適用したりすることができます。パイプライン実行ポリシーは自動化されたガードレールとして機能し、手動操作なしですべてのコンテナデプロイメントにセキュリティ標準が一貫して適用されるようにします。\n\n![パイプライン実行ポリシー](https://res.cloudinary.com/about-gitlab-com/image/upload/v1772547517/ddhhugzcr2swptgodof2.png \"パイプライン実行ポリシーのアクション\")\n\n#### マージリクエスト承認ポリシー\n\n[マージリクエスト承認ポリシー](https://docs.gitlab.com/ja-jp/user/application_security/policies/merge_request_approval_policies/)は、コンテナの脆弱性を含むマージリクエストを指定された承認者がレビューし、承認することを要求することでセキュリティゲートを適用します。\n\n重大度の高い脆弱性が検出された場合にマージをブロックするポリシーや、新しいコンテナの検出結果を導入するマージリクエストにセキュリティチームの承認を要求するポリシーを設定できます。これらのポリシーにより、低リスクな変更の開発速度を維持しながら、脆弱性のあるコンテナイメージがパイプラインを通じて進むことを防ぎます。\n\n![MRでブロックを実行するマージリクエスト承認ポリシー](https://res.cloudinary.com/about-gitlab-com/image/upload/v1772547513/hgnbc1vl4ssqafqcyuzg.png \"MRでブロックを実行するマージリクエスト承認ポリシー\")\n\n## 適切なアプローチの選択\n\n| スキャンの種類   | 使用するタイミング   | 主なメリット                   |\n| --------- | ----------- | ------------------------ |\n| パイプラインベース | すべてのビルド時    | シフトレフトセキュリティ、脆弱なビルドをブロック |\n| レジストリスキャン | 継続的なモニタリング  | 保存されたイメージの新しい CVE を検出    |\n| マルチコンテナ   | マイクロサービス    | 並行スキャン、パイプラインの高速化        |\n| 継続的脆弱性    | デプロイ間       | プロアクティブなアドバイザリーモニタリング    |\n| 運用        | 本番環境のモニタリング | ランタイム脆弱性の検出              |\n\n包括的なセキュリティのためには、複数のアプローチを組み合わせることをお勧めします。開発中の問題を検出するためのパイプラインベースのスキャン、継続的なモニタリングのためのレジストリ向けコンテナスキャン、そして本番環境の可視性のための運用スキャンを組み合わせてご活用ください。\n\n## 今すぐ始める\n\nコンテナセキュリティへの最短ルートは、パイプラインベースのスキャンを有効にすることです。\n\n1. プロジェクトの **Secure > セキュリティ設定** に移動します。\n2. コンテナスキャンの **マージリクエストで設定** をクリックします。\n3. 作成されたマージリクエストをマージします。\n4. 次のパイプラインに脆弱性スキャンが含まれるようになります。\n\nその後、セキュリティ要件と GitLab のプランに応じて、追加のスキャンの種類を段階的に導入してください。\n\nコンテナセキュリティは一度実施すれば完了するものではなく、継続的なプロセスです。\nGitLab の包括的なコンテナスキャン機能を活用することで、ビルドからランタイムまでコンテナライフサイクルのあらゆる段階で脆弱性を検出できます。\n\n> GitLab がセキュリティ態勢の強化にどのように役立つかについての詳細は、[GitLab セキュリティ & ガバナンス ソリューションページ](https://about.gitlab.com/solutions/application-security-testing/)をご覧ください。",[672],"Fernando Diaz","2026-03-09","2026-03-05","GitLab コンテナスキャン完全ガイド：SBOM生成から運用監視まで5つのスキャン手法",[9,23],"GitLab のさまざまなコンテナスキャン方法を詳しく解説し、コンテナライフサイクルの各段階でセキュリティを確保する方法をご紹介します。",{"slug":679,"featured":28,"template":13},"complete-guide-to-gitlab-container-scanning",{"content":681,"config":691},{"title":682,"description":683,"authors":684,"heroImage":686,"date":687,"body":688,"category":9,"tags":689},"GitLab.comのセキュリティ強化：多要素認証の必須化","Secure by Designへのコミットメントの一環として、GitLabが多要素認証（MFA）を必須化する方法と、それがユーザーに与える影響について解説します。",[685],"Kim Waters","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664923/Blog/Hero%20Images/security-checklist.png","2026-01-09","GitLab.comのすべてのユーザーアカウントのセキュリティ強化のため、GitLabでは、ユーザー名とパスワードを使用してサインインするすべてのユーザーとAPIエンドポイントに対して、多要素認証（MFA）を必須化します。\n\n## 多要素認証必須化の理由\n\n今回の変更は、GitLabの[Secure by Designへのコミットメント](https://about.gitlab.com/blog/last-year-we-signed-the-secure-by-design-pledge-heres-our-progress/)における重要な取り組みの1つです。MFAは、ソフトウェア開発業界全体で継続的な脅威となっているクレデンシャルスタッフィング攻撃やアカウント乗っ取り攻撃に対する重要な防御手段となります。\n\n## 知っておくべき重要な情報\n\n### 何が変わるのか？\n\nGitLabは、ユーザー名とパスワードで認証するサインインに対して、MFAを必須化します。これにより、パスワードだけでなく、重要な第2の認証レイヤーが追加されます。\n\n### 適用されるケースとされないケース\n\n1. ***適用されるケース：*** ユーザー名とパスワードでGitLab.comにサインインする場合、またはパスワードを使用してAPIに認証する場合\n2. ***適用されないケース：*** アクセスにソーシャルサインオン（Googleなど）またはシングルサインオン（SSO）のみを使用している場合（*注意：SSOを使用していても、直接ログイン用のパスワードを設定している場合は、SSO以外のパスワードベースのログインに対してMFAが必要になります）*\n\n### ロールアウトのタイムライン\n\n1. 実装は今後数か月にわたって段階的に行われます。これは、ユーザーの予期しない中断や生産性の低下を最小限に抑え、アカウントのロックアウトを防ぐことを目的としています。ユーザーグループによって時期は異なりますが、近日中にMFAの有効化を求められます。各グループは、実行したアクション、またはコントリビュートしたコードに基づいて選択されます。以下の方法で通知されます。\n\n   * ✉️ メール通知 - 影響を受けるフェーズの前\n   * 🔔 定期的な製品内リマインダー - 14日前\n   * ⏱️ 一定期間後（メールが届きます） - MFAを有効にするまでGitLabへのアクセスがブロックされます\n\n### 必要な対応\n\n1. ユーザー名とパスワードでGitLab.comにサインインする場合：\n\n   * パスキー、認証アプリ、WebAuthnデバイス、またはメール認証など、利用可能なMFA方法の1つを今すぐ事前に設定することを強くおすすめします。これにより、最も安全でシームレスな移行が保証されます。\n   * GitLab.comの**ユーザー設定**にアクセスします。\n   * **アカウント**セクションを選択します。\n   * **2要素認証**を有効にし、希望する方法（認証アプリやWebAuthnデバイスなど）を設定します。\n   * 必要に応じてアクセスを回復できるよう、**リカバリーコードを安全に保存**してください。\n2. パスワードを使用してAPIに認証する場合：\n\n   * 個人アクセストークン（PAT）への切り替えを事前に行うことを強くおすすめします。詳細については、[ドキュメント](https://docs.gitlab.com/ja-jp/user/profile/account/two_factor_authentication_troubleshooting/#error-http-basic-access-denied-if-a-password-was-provided-for-git-authentication-)をご確認ください。\n\n## よくある質問\n\n*期限までにMFAを有効にしないとどうなりますか？*\n\n* サインインする前にMFAの設定が必要になります。\n\n*CI/CDパイプラインや自動化に影響はありますか？*\n\n* はい、パスワードの代わりにPATまたはデプロイトークンを使用していない場合は影響があります。\n\n*SSOを使用していますが、直接サインインすることもあります。その場合、MFAは必要ですか？*\n\n* はい、フォールバックシナリオを含む、パスワードベースの認証にはMFAが必要です。\n\n*どのようなMFAリカバリーオプションが利用できますか？*\n\n* [トラブルシューティングドキュメント](https://docs.gitlab.com/ja-jp/user/profile/account/two_factor_authentication_troubleshooting/#recovery-options-and-2fa-reset)をご確認ください。*\n\n具体的なタイムラインとその他のリソースについては、ロールアウト日までに段階的に共有される予定です。この重要な変更についてご覧いただき、ありがとうございます。",[9,690],"product",{"featured":12,"template":13,"slug":692},"strengthening-gitlab-com-security-mandatory-multi-factor-authentication",{"content":694,"config":705},{"heroImage":695,"body":696,"authors":697,"updatedDate":699,"date":700,"title":701,"tags":702,"description":704,"category":9},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1759320418/xjmqcozxzt4frx0hori3.png","[パイプライン変数](https://docs.gitlab.com/ci/variables/#use-pipeline-variables)は、GitLab\nCI/CDパイプラインを実行時にカスタマイズする便利な方法として長く活用されてきました。しかし、CI/CDセキュリティのベストプラクティスが進化するにつれ、パイプラインのカスタマイズに関してより強力な制御が必要であることが明らかになりました。制限のないパイプライン変数では、パイプライントリガー権限を持つユーザーが、検証や型のチェックなしに値を上書きできてしまいます。\n\n\n\nセキュリティ上の考慮事項に加えて、パイプライン変数には適切なドキュメントと明示的な宣言が欠けているため、どのような入力が想定され、パイプライン全体でどのように使用されるかを理解することが困難です。これにより、メンテナンスの課題が生じ、[CI/CD](https://about.gitlab.com/ja-jp/topics/ci-cd/)プロセスに対する適切なガバナンスの確立が難しくなります。\n\n\n\n## パイプライン入力の導入\n\n\n\nパイプライン変数に依存する代わりに、GitLabの[パイプライン入力](https://docs.gitlab.com/ci/inputs/#for-a-pipeline)機能の使用を強く推奨します。パイプライン入力には次の利点があります：\n\n\n\n* **明示的な宣言**: 入力は`.gitlab-ci.yml`で明示的に宣言する必要があり、自己文書化されます。\n\n\n* **型安全性**: 異なる入力型(文字列、ブール値、数値、配列)をサポートします。\n\n\n* **組み込みの検証**: 入力値の自動検証が行われます。\n\n\n* **セキュリティの向上**: 変数インジェクション攻撃のリスクがなく、宣言された入力のみが外部から渡されます。\n\n\n\n### 基本的な例\n\n\n\n```yaml\n\nspec:\n  inputs:\n    deployment_env:\n      description: \"ターゲットデプロイメント環境\"\n      type: string\n      options: [\"staging\", \"production\"]\n      default: \"staging\"\n    enable_tests:\n      description: \"テストスイートを実行\"\n      type: boolean\n      default: true\n\ntest:\n  script:\n    - echo \"テストを実行中\"\n  rules:\n    - if: $[[ inputs.enable_tests ]] == true\n\ndeploy:\n  script:\n    - echo \"$[[ inputs.deployment_env ]]へデプロイ中\"\n```\n\n\n\nCI/CD入力が検証付きで型安全なパラメータ渡しを実現する方法については、この[チュートリアル](https://about.gitlab.com/blog/ci-cd-inputs-secure-and-preferred-method-to-pass-parameters-to-a-pipeline/)をご覧ください。\n\n\n\n## パイプライン変数の制限\n\n\n\nパイプライン入力への移行を効果的に進め、パイプライン変数からの移行を促進するには、[「パイプライン変数が使用できる最小ロール」](https://docs.gitlab.com/ci/variables/#restrict-pipeline-variables)設定を構成する必要があります。この設定により、パイプラインをトリガーする際にどのロールがパイプライン変数を使用できるかを細かく制御できます。\n\n\n\n**プロジェクトレベル:** プロジェクトの **[設定] > [CI/CD] > [変数] > [パイプライン変数が使用できる最小ロール]** の順に移動して、設定を構成します。\n\n\n\n利用可能なオプション:\n\n\n\n* **誰にも許可しない**(`no_one_allowed`) - 推奨される最も安全なオプションです。すべての変数の上書きを防ぎます。\n\n\n* **デベロッパー**(`developer`) - デベロッパー以上のロールが変数を上書きできます。\n\n\n* **メンテナー**(`maintainer`) - メンテナーロール以上が必要です。\n\n\n* **オーナー**(`owner`) - プロジェクトオーナーのみが変数を上書きできます。\n\n\n\n**グループレベル:** グループメンテナーは、**[設定] > [CI/CD] > [変数] > [パイプライン変数を使えるデフォルトロール]**の順に移動して、グループ内のすべての新規プロジェクトに適用される安全なデフォルト値を設定できます。これにより組織全体で一貫したセキュリティポリシーを確保できます。ここでも、デフォルト値として**誰にも許可しない**を使用することを推奨します。これにより、このグループ内の新規プロジェクトは安全なデフォルト設定で作成されます。なお、プロジェクトオーナーは引き続きこの設定を変更できます。\n\n\n\nパイプライン変数が完全に制限されている場合(「誰にも許可しない」の場合)、[事前入力された変数](https://docs.gitlab.com/ci/pipelines/#prefill-variables-in-manual-pipelines)は「新しいパイプラインUI」フォームに表示されません。\n\n\n\n## パイプライン変数から移行する方法\n\n\n\n### ギャップを埋める\n\n\n\n組織内には、パイプラインをトリガーする際に一度も使用したことがないにもかかわらず、パイプライン変数がデフォルトで有効になっているプロジェクトが存在する可能性があります。これらのプロジェクトは、中断のリスクなしにより安全な設定に移行できます。GitLabは、グループ設定を通じて[移行機能を提供](https://docs.gitlab.com/ci/variables/#enable-pipeline-variable-restriction-for-multiple-projects)しています：\n\n\n\n* **[設定] > [CI/CD] > [変数]** の順に移動します。\n\n\n* **パイプライン変数を使用していないプロジェクトで、パイプライン変数を無効にする**で、**マイグレーションの開始**を選択します。\n\n\n\nこの移行は、過去に使用したことがないすべてのプロジェクトのプロジェクト設定を通じて、パイプライン変数を安全に無効にするバックグラウンドジョブです。\n\n\n\n### パイプライン変数を入力に変換\n\n\n\n特定されたパイプライン変数ごとに、対応するパイプライン入力を作成します。\n\n\n\n**変更前(パイプライン変数を使用)**\n\n\n\n```text\n\nvariables:\n  DEPLOY_ENV:\n    description: \"デプロイメント環境\"\n    value: \"staging\"\n  ENABLE_CACHE:\n    description: \"デプロイメントキャッシュを有効化\"\n    value: \"true\"\n  VERSION:\n    description: \"アプリケーションバージョン\"\n    value: \"1.0.0\"\n\ndeploy:\n  script:\n    - echo \"$DEPLOY_ENVへバージョン$VERSIONをデプロイ中\"\n    - |\n      if [ \"$ENABLE_CACHE\" = \"true\" ]; then\n        echo \"キャッシュが有効です\"\n      fi\n```\n\n\n\n**変更後(パイプライン入力を使用)**\n\n\n\n```text\n\nspec:\n  inputs:\n    deploy_env:\n      description: \"デプロイメント環境\"\n      type: string\n      default: \"staging\"\n      options: [\"dev\", \"staging\", \"production\"]\n\n    enable_cache:\n      description: \"デプロイメントキャッシュを有効化\"\n      type: boolean\n      default: true\n    \n    version:\n      description: \"アプリケーションバージョン\"\n      type: string\n      default: \"1.0.0\"\n      regex: '^[0-9]+\\.[0-9]+\\.[0-9]+$'\n\ndeploy:\n  script:\n    - echo \"$[[ inputs.deploy_env ]]へバージョン$[[ inputs.version ]]をデプロイ中\"\n    - |\n      if [ \"$[[ inputs.enable_cache ]]\" = \"true\" ]; then\n        echo \"キャッシュが有効です\"\n      fi\n```\n\n\n\n### トリガージョブの移行\n\n\n\n`trigger`キーワードでトリガージョブを使用している場合は、ジョブレベルの`variables`を定義していないこと、またはトップレベルの`variables`、`extends`、`include`からの変数の継承を無効にしていないことを確認してください。変数が暗黙的にダウンストリームにパイプライン変数として渡される可能性があるためです。ダウンストリームプロジェクトでパイプライン変数が制限されている場合、パイプラインの作成は失敗します。\n\n\n\nパイプライン変数の代わりに、パイプライン入力を使用するようにCI構成を更新することを検討してください。\n\n\n\n```yaml\n\nvariables:\n  FOO: bar\n\ndeploy-staging:\n  inherit:\n    variables: false # そうしないとFOOがダウンストリームにパイプライン変数として送信されます\n  trigger:\n    project: myorg/deployer\n    inputs:\n      deployment_env: staging\n      enable_tests: true\n```\n\n\n\n## まとめ\n\n\n\nパイプライン変数からパイプライン入力への移行は、変数インジェクションからCI/CDインフラを保護するセキュリティ強化であり、同時により優れたドキュメント、型安全性、検証を提供します。これらの制限を実装し、パイプライン入力を採用することで、セキュリティを向上させるだけでなく、パイプラインをよりメンテナンスしやすく、自己文書化され、耐障害性の高いものにすることができます。\n\n\n\n移行には初期の労力が必要ですが、長期的なメリットは移行コストをはるかに上回ります。まず、新規プロジェクトのグループレベルでパイプライン変数を制限ることから始め、次に上記の段階的なアプローチを使用して既存のパイプラインを体系的に移行してください。\n\n\n\nセキュリティの強化は、終わりのない継続的なプロセスです。パイプライン入力は、保護されたブランチ、ジョブトークン許可リスト、コンテナレジストリ保護など、他のGitLabセキュリティ機能を補完し、より安全なCI/CD環境を構築するための重要なステップです。\n\n\n\n> パイプライン入力を始めるには、[GitLab Ultimateの無料トライアルに今すぐ登録](https://about.gitlab.com/ja-jp/free-trial/devsecops/)してください。\n",[698],"Fabio Pitino","2025-11-12","2025-11-04","パイプライン変数からパイプライン入力への移行でセキュリティを強化",[9,703,23,106],"DevSecOps","このガイドでは、明示的な宣言、型安全性、検証の実装など、パイプラインのカスタマイズに関するより強力な制御について説明します。",{"featured":28,"template":13,"slug":706},"migrate-from-pipeline-variables-to-pipeline-inputs-for-better-security",{"promotions":708},[709,723,735],{"id":710,"categories":711,"header":713,"text":714,"button":715,"image":720},"ai-modernization",[712],"ai-ml","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":716,"config":717},"Get your AI maturity score",{"href":718,"dataGaName":719,"dataGaLocation":242},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":721},{"src":722},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":724,"categories":725,"header":727,"text":714,"button":728,"image":732},"devops-modernization",[690,726],"devsecops","Are you just managing tools or shipping innovation?",{"text":729,"config":730},"Get your DevOps maturity score",{"href":731,"dataGaName":719,"dataGaLocation":242},"/assessments/devops-modernization-assessment/",{"config":733},{"src":734},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":736,"categories":737,"header":738,"text":714,"button":739,"image":743},"security-modernization",[9],"Are you trading speed for security?",{"text":740,"config":741},"Get your security maturity score",{"href":742,"dataGaName":719,"dataGaLocation":242},"/assessments/security-modernization-assessment/",{"config":744},{"src":745},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"header":747,"blurb":748,"button":749,"secondaryButton":753},"今すぐ開発をスピードアップ","DevSecOpsに特化したインテリジェントオーケストレーションプラットフォームで実現できることをご確認ください。\n",{"text":45,"config":750},{"href":751,"dataGaName":48,"dataGaLocation":752},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/ja-jp/","feature",{"text":50,"config":754},{"href":52,"dataGaName":53,"dataGaLocation":752},1773871226699]