DevOps リソースのセキュリティに関する推奨事項

この記事では、Environment 設定 ページを使用して、Azure DevOpsGitHub、または GitLab 環境に接続する場合に Microsoft Defender for Cloud で表示される可能性がある推奨事項を示します。 環境に表示される推奨事項は、保護するリソースとカスタマイズした構成に基づいています。

これらの推奨事項に応じて実行できるアクションについては、「Defender for Cloud で推奨事項を 修復するを参照してください。

Defender セキュリティの利点と機能の詳細を確認してください。

DevOps の推奨事項は、 安全なスコアには影響しません。 最初に解決する推奨事項を決定するには、各推奨事項の重大度と、セキュリティ スコアに対する潜在的な影響を確認します。

Azure DevOps の推奨事項

Azure DevOps リポジトリで Azure DevOps の GitHub Advanced Security (GHAzDO) を有効にする必要がある

説明: Defender for Cloud の DevOps セキュリティでは、中央コンソールを使用して、Azure DevOps 全体のコードからクラウドにアプリケーションとリソースを保護する機能をセキュリティ チームに提供します。 GitHub Advanced Security for Azure DevOps を含む GitHub Advanced Security for Azure DevOps (GHAzDO) リポジトリを有効にすると、Microsoft Defender for Cloud に表示される Azure DevOps リポジトリのシークレット、依存関係、コードの脆弱性に関する発見が得られます。

重大度: 高

Azure DevOps リポジトリでシークレット スキャンの検出結果を解決する必要がある

説明: シークレットがコード リポジトリに見つかりました。 セキュリティ侵害を防ぐために、ただちに修復してください。 リポジトリで見つかったシークレットが漏洩したり、敵対者によって検出されたりして、アプリケーションやサービスが侵害される可能性があります。 Microsoft Security DevOps 資格情報スキャン ツールは、実行するように構成されているビルドのみをスキャンします。 そのため、リポジトリ内のシークレットの完全な状態が結果に反映されていない場合があります。

重大度: 高

Azure DevOps リポジトリでコード スキャンの検出結果を解決する必要がある

説明: コード リポジトリに脆弱性が見つかりました。 リポジトリのセキュリティ態勢を改善するために、これらの脆弱性を修復することを強くお勧めします。

重大度: 中

Azure DevOps リポジトリで依存関係の脆弱性に関するスキャンの検出結果を解決する必要がある

説明: コード リポジトリに見つかった依存関係の脆弱性。 リポジトリのセキュリティ態勢を改善するために、これらの脆弱性を修復することを強くお勧めします。

重大度: 中

Azure DevOps リポジトリでコードとしてのインフラストラクチャ スキャンの検出結果を解決する必要がある

説明: コードとしてのインフラストラクチャのセキュリティ構成に関する問題がリポジトリに見つかりました。 テンプレート ファイルで問題が検出されました。 関連するクラウド リソースのセキュリティ態勢を改善するために、これらの問題を修復することを強くお勧めします。

重大度: 中

Azure DevOps パイプラインには、フォークのビルドで使用できるシークレットを含めることはできません

説明: パブリック リポジトリでは、組織外のユーザーがフォークを作成し、フォークされたリポジトリでビルドを実行する可能性があります。 そのような場合、この設定が有効になっていると、内部での使用が想定されているビルド パイプライン シークレットに外部のユーザーがアクセスできます。

重大度: 高

Azure DevOps サービス接続ですべてのパイプラインへのアクセスを許可しないこと

説明: サービス接続は、ジョブでタスクを実行するために Azure Pipelines から外部およびリモート サービスへの接続を作成するために使用されます。 パイプラインのアクセス許可は、サービス接続を使用する権限をどのパイプラインに付与するかを制御します。 パイプライン操作のセキュリティをサポートするために、すべての YAML パイプラインへのアクセス権をサービス接続に付与しないでください。 これは、1 つのパイプラインで使用されるコンポーネントの脆弱性を攻撃者が重要なリソースにアクセスして他のパイプラインを攻撃するために使用できるため、最小限の特権の原則を維持するのに役立ちます。

重大度: 高

Azure DevOps セキュア ファイルですべてのパイプラインへのアクセスを許可しないこと

説明: ファイルをセキュリティで保護することで、開発者はパイプライン間で共有できるファイルを格納できます。 これらのファイルは通常、署名証明書や SSH キーなどのシークレットを保存するために使用されます。 セキュア ファイルにすべての YAML パイプラインへのアクセスが許可されている場合、YAML パイプラインを構築してセキュア ファイルにアクセスすることによって、権限のないユーザーがセキュア ファイルから情報を盗むことができます。

重大度: 高

シークレット変数を含む Azure DevOps 変数グループですべてのパイプラインへのアクセスを許可しないこと

説明: 変数グループには、YAML パイプラインに渡すか、複数のパイプラインで使用できるようにする値とシークレットが格納されます。 同じプロジェクト内の複数のパイプラインで変数グループを共有および使用できます。 シークレットを含む変数グループがすべての YAML パイプラインからアクセス可能としてマークされている場合、攻撃者は新しいパイプラインを作成することによって、シークレット変数が関係するアセットを悪用することができます。

重大度: 高

Azure DevOps クラシック Azure サービス接続を使用してサブスクリプションにアクセスしないこと

説明: Azure サブスクリプションに接続するには、Azure クラシック サービス接続ではなく、Azure Resource Manager (ARM) タイプのサービス接続を使用します。 ARM モデルでは、さまざまな面でセキュリティが強化されます。たとえば、アクセス制御の強化、監査の改善、ARM ベースのデプロイ/ガバナンス、マネージド ID へのアクセス、シークレットのキー コンテナーへのアクセス、Entra のアクセス許可ベースの認証、合理化された管理のためのタグとリソース グループのサポートなどです。

重大度: 中

(プレビュー)Azure DevOps リポジトリでは、API セキュリティ テストの結果が解決されている必要があります

説明: コード リポジトリに存在する API セキュリティの脆弱性。 リポジトリのセキュリティ態勢を改善するために、これらの脆弱性を修復することを強くお勧めします。

重大度: 中

(プレビュー)Azure DevOps リポジトリでは、コード プッシュに対して 2 つ以上のレビュー担当者の承認が必要です

説明: 意図しない変更や悪意のある変更が直接コミットされないようにするには、Azure DevOps リポジトリに既定のブランチの保護ポリシーを実装することが重要です。 コードを既定のブランチにマージする前に、少なくとも 2 人のコード レビュー担当者に pull request の承認を要求することをお勧めします。 少なくとも 2 人のレビュー担当者からの承認を要求することで、承認されていない変更のリスクを軽減でき、システムが不安定になり、セキュリティの脆弱性が発生する可能性があります。

この推奨事項は、Azure DevOps を Defender for Cloud に接続している場合に、Defender for Cloud の基本的なセキュリティ体制で提供されます。

重大度: 高

(プレビュー)Azure DevOps リポジトリでは、要求者が独自のプル要求を承認できないようにする必要がある

説明: 意図しない変更や悪意のある変更が直接コミットされないようにするには、Azure DevOps リポジトリに既定のブランチの保護ポリシーを実装することが重要です。 pull request 作成者が自分の申請を承認することを禁止し、すべての変更が作成者以外のユーザーによる客観的なレビューを確実に受けられるようにすることをお勧めします。 これにより、承認されていない変更のリスクを軽減でき、システムの不安定さやセキュリティの脆弱性につながる可能性があります。

この推奨事項は、Azure DevOps を Defender for Cloud に接続している場合に、Defender for Cloud の基本的なセキュリティ体制で提供されます。

重大度: 高

(プレビュー)Azure DevOps プロジェクトでクラシック パイプラインの作成を無効にする必要がある

説明: クラシック ビルドおよびリリース パイプラインの作成を無効にすると、同じリソース (同じサービス接続など) を共有する YAML とクラシック パイプラインに起因するセキュリティ上の問題が回避されます。 潜在的な攻撃者は、クラシック パイプラインを利用して、最新の YAML パイプラインを中心に設定された一般的な防御メカニズムを回避するプロセスを作成できます。

重大度: 高

GitHub の推奨設定

GitHub organization は、すべてのリポジトリからアクション シークレットにアクセスできるようにしない

説明: GitHub 組織レベルで格納されている GitHub アクション ワークフローで使用されるシークレットについては、アクセス ポリシーを使用して、組織のシークレットを使用できるリポジトリを制御できます。 組織レベルのシークレットを使うと、複数のリポジトリ間でシークレットを共有できます。 これにより、重複するシークレットを作成する必要が減ります。 ただし、リポジトリからシークレットにアクセスできるようになったら、リポジトリに対する書き込みアクセス権を持つすべてのユーザーは、ワークフロー内の任意のブランチからシークレットにアクセスできます。 攻撃対象領域を減らすには、選択したリポジトリからのみシークレットにアクセスできるようにします。

この推奨事項は、Azure DevOps を Defender for Cloud に接続している場合に、Defender for Cloud の基本的なセキュリティ体制で提供されます。

重大度: 高

GitHub リポジトリでシークレット スキャンを有効にする必要がある

説明: GitHub は、リポジトリに誤ってコミットされたシークレットの不正使用を防ぐために、既知の種類のシークレットについてリポジトリをスキャンします。 シークレット スキャンでは、GitHub リポジトリ内に存在するすべてのブランチで Git 履歴全体がスキャンされ、シークレットが探されます。 シークレットの例として、サービス プロバイダーが認証のために発行する場合があるトークンと秘密キーがあります。 シークレットがリポジトリにチェックインされると、リポジトリへの読み取りアクセス権を持つすべてのユーザーは、そのシークレットを使用して、それらの権限で外部サービスにアクセスできます。 シークレットは、プロジェクトのリポジトリの外部にある専用の安全な場所に保存する必要があります。

重大度: 高

GitHub リポジトリでコード スキャンを有効にする必要がある

説明: GitHub では、コード スキャンを使用してコードを分析し、コード内のセキュリティの脆弱性とエラーを見つけます。 コード スキャンを使用すると、コード内の既存の問題を検出、トリアージして、その修正に優先度を付けることができます。 また、コード スキャンによって、開発者が新しい問題を混入するのを防ぐことができます。 特定の日時にスキャンを実行するようにスケジュールすることや、リポジトリで特定のイベント (プッシュなど) が発生した場合にスキャンをトリガーすることができます。 コード スキャンによって、コード内で潜在的な脆弱性やエラーが検出された場合、GitHub では、リポジトリにアラートが表示されます。 脆弱性とは、プロジェクトの秘密性、一貫性、または可用性を損なうために悪用される可能性のある、プロジェクトのコードの問題です。

重大度: 中

GitHub リポジトリで Dependabot スキャンを有効にする必要がある

説明: GitHub は、リポジトリに影響するコード依存関係の脆弱性を検出すると、Dependabot アラートを送信します。 脆弱性とは、プロジェクトあるいはそのコードを利用する他のプロジェクトにおいて、秘密性、一貫性、可用性を損なうために悪用されうる、プロジェクトコードの問題です。 脆弱性の種類、重要度、攻撃の方法は様々です。 セキュリティの脆弱性があるパッケージにコードが依存している場合、この脆弱性のある依存関係が原因で、さまざまな問題が発生する可能性があります。

重大度: 中

GitHub リポジトリでシークレット スキャンの検出結果を解決する必要がある

説明: コード リポジトリに含まれるシークレット。 セキュリティ侵害を防ぐために、ただちにこれを修復する必要があります。 リポジトリで検出されたシークレットは、漏洩する可能性や、敵対者が見つける可能性があり、それによってアプリケーションやサービスが侵害される可能性があります。

重大度: 高

GitHub リポジトリでコード スキャンの検出結果を解決する必要がある

説明: コード リポジトリに脆弱性が見つかりました。 リポジトリのセキュリティ態勢を改善するために、これらの脆弱性を修復することを強くお勧めします。

重大度: 中

GitHub リポジトリで依存関係の脆弱性に関するスキャンの検出結果を解決する必要がある

説明: GitHub リポジトリには、依存関係の脆弱性スキャンの結果が解決されている必要があります。

重大度: 中

GitHub リポジトリでコードとしてのインフラストラクチャ スキャンの検出結果を解決する必要がある

説明: コードとしてのインフラストラクチャのセキュリティ構成の問題がリポジトリで見つかりました。 テンプレート ファイルで問題が検出されました。 関連するクラウド リソースのセキュリティ態勢を改善するために、これらの問題を修復することを強くお勧めします。

重大度: 中

GitHub リポジトリで既定のブランチの保護ポリシーを有効にする必要がある

説明: 意図しない変更や悪意のある変更がリポジトリに直接コミットされないように、ブランチ保護ポリシーを使用してリポジトリの既定のブランチを保護する必要があります。

重大度: 高

GitHub リポジトリで既定のブランチへの強制的なプッシュを無効にする必要がある

説明: 既定のブランチは通常、デプロイやその他の特権アクティビティに使用されるため、それに対する変更は慎重に行う必要があります。 強制的なプッシュを有効にすると、意図しない変更や悪意のある変更が既定のブランチに行われる可能性があります。

重大度: 中

GitHub 組織でシークレット スキャン プッシュ保護を有効にする必要がある

説明: プッシュ保護は、シークレットを含むコミットをブロックするため、シークレットが誤って公開されるのを防ぎます。 資格情報の露出のリスクを回避するには、シークレット スキャンが有効なすべてのリポジトリでプッシュ保護を自動的に有効にする必要があります。

重大度: 高

GitHub リポジトリでセルフホステッド ランナーを使用しないこと

説明: GitHub 上のセルフホステッド ランナーは、エフェメラルクリーン仮想マシンでの操作の保証を欠いており、ワークフロー内の信頼されていないコードによって永続的に侵害される可能性があります。 そのため、セルフホステッド ランナーはアクション ワークフローに利用しないでください。

重大度: 高

GitHub 組織でアクション ワークフローのアクセス許可を読み取り専用に設定する必要がある

説明: 既定では、悪意のあるユーザーが過剰なアクセス許可を持つワークフローを悪用してリソースにアクセスしたり改ざんしたりするのを防ぐために、アクション ワークフローに読み取り専用のアクセス許可を付与する必要があります。

重大度: 高

GitHub 組織には管理者のアクセス許可を持つ複数のユーザーが必要

説明: 少なくとも 2 人の管理者がいると、管理者アクセス権を失うリスクが軽減されます。 これは、非常用アカウントのシナリオの場合に役立ちます。

重大度: 高

GitHub 組織では基本アクセス許可をアクセス許可なしまたは読み取りに設定する必要がある

説明: 最小限の特権の原則に従い、不要なアクセスを防ぐために、基本アクセス許可を none に設定するか、読み取る必要があります。

重大度: 高

(プレビュー) GitHub リポジトリで API セキュリティ テストの結果を解決する必要がある

説明: コード リポジトリに API セキュリティの脆弱性が見つかりました。 リポジトリのセキュリティ態勢を改善するために、これらの脆弱性を修復することを強くお勧めします。

重大度: 中

(プレビュー)GitHub 組織は、すべてのリポジトリからアクション シークレットにアクセスできるようにするべきではありません

説明: GitHub 組織レベルで格納されている GitHub アクション ワークフローで使用されるシークレットについては、アクセス ポリシーを使用して、組織のシークレットを使用できるリポジトリを制御できます。 組織レベルのシークレットを使用すると、複数のリポジトリ間でシークレットを共有できるため、重複するシークレットを作成する必要が減ります。 ただし、リポジトリからシークレットにアクセスできる場合は、リポジトリに対する書き込みアクセス権を持つすべてのユーザーが、ワークフロー内の任意のブランチからシークレットにアクセスできます。 攻撃対象領域を減らすには、選択したリポジトリからのみシークレットにアクセスできるようにします。

重大度: 高

(プレビュー)GitHub 組織は、パブリック コードに一致する Copilot の提案をブロックする必要があります

説明: GitHub のパブリック コードに一致するコード提案をブロックするために GitHub Copilot のフィルターを有効にすると、セキュリティと法的コンプライアンスが強化されます。 これにより、公開コードまたはオープンソース コードが意図せず組み込まれるのを防ぎ、法的問題のリスクを軽減し、ライセンス条項への準拠を確保します。 さらに、パブリック コードから組織のプロジェクトに潜在的な脆弱性が導入されるのを回避し、それによってコードの品質とセキュリティを高めるのに役立ちます。 フィルターが有効になっている場合、GitHub Copilot は、GitHub のパブリック コードに対して、周囲の約 150 文字のコードでコード候補をチェックします。 一致または近い一致がある場合、候補は表示されません。

重大度: 高

(プレビュー)GitHub 組織では、外部コラボレーターに多要素認証を適用する必要がある

説明: GitHub 組織の外部コラボレーターに多要素認証を適用することは、コラボレーターが組織のリポジトリとリソースにアクセスするためにパスワード以外に追加の形式の ID を使用することを要求するセキュリティ対策です。 これにより、パスワードが侵害された場合でも、承認されていないアクセスから保護することでセキュリティが強化され、業界標準への準拠が保証されます。 これには、要件についてコラボレーターに通知し、移行のサポートを提供し、最終的にデータ侵害のリスクを軽減する必要があります。

重大度: 高

(プレビュー)GitHub リポジトリでは、コード プッシュに対して 2 つ以上のレビュー担当者の承認が必要です

説明: 意図しない変更や悪意のある変更が直接コミットされないようにするには、GitHub リポジトリに既定のブランチの保護ポリシーを実装することが重要です。 コードを既定のブランチにマージする前に、少なくとも 2 人のコード レビュー担当者に pull request の承認を要求することをお勧めします。 少なくとも 2 人のレビュー担当者からの承認を要求することで、承認されていない変更のリスクを軽減でき、システムが不安定になり、セキュリティの脆弱性が発生する可能性があります。

重大度: 高

GitLab の推奨事項

GitLab プロジェクトでシークレット スキャンの検出結果を解決する必要がある

説明: シークレットがコード リポジトリに見つかりました。 セキュリティ侵害を防ぐために、ただちにこれを修復する必要があります。 リポジトリで検出されたシークレットは、漏洩する可能性や、敵対者が見つける可能性があり、それによってアプリケーションやサービスが侵害される可能性があります。

重大度: 高

GitLab プロジェクトでコード スキャンの検出結果を解決する必要がある

説明: コード リポジトリに脆弱性が見つかりました。 リポジトリのセキュリティ態勢を改善するために、これらの脆弱性を修復することを強くお勧めします。

重大度: 中

GitLab プロジェクトで依存関係の脆弱性に関するスキャンの検出結果を解決する必要がある

説明: GitHub リポジトリには、依存関係の脆弱性スキャンの結果が解決されている必要があります。

重大度: 中

GitLab プロジェクトでコードとしてのインフラストラクチャ スキャンの検出結果を解決する必要がある

説明: コードとしてのインフラストラクチャのセキュリティ構成の問題がリポジトリで見つかりました。 表示された問題はテンプレート ファイルで検出されました。 関連するクラウド リソースのセキュリティ態勢を改善するために、これらの問題を修復することを強くお勧めします。

重大度: 中

非推奨の DevOps セキュリティに関する推奨事項

コード リポジトリでコード スキャンの検出結果を解決する必要がある

説明: Defender for Cloud の DevOps セキュリティで、コード リポジトリに脆弱性が見つかりました。 リポジトリのセキュリティ態勢を改善するために、これらの脆弱性を修復することを強くお勧めします。 (関連ポリシーはありません)

重大度: 中

コード リポジトリでシークレット スキャンの検出結果を解決する必要がある

説明: Defender for Cloud の DevOps セキュリティで、コード リポジトリにシークレットが見つかりました。 セキュリティ侵害を防ぐために、ただちにこれを修復する必要があります。 リポジトリで検出されたシークレットは、漏洩する可能性や、敵対者が見つける可能性があり、それによってアプリケーションやサービスが侵害される可能性があります。 Azure DevOps では、Microsoft Security DevOps CredScan ツールによって、このツールが実行されるように構成されているビルドのみがスキャンされます。 そのため、リポジトリ内のシークレットの完全な状態が結果に反映されていない場合があります。 (関連ポリシーはありません)

重大度: 高

コード リポジトリで Dependabot スキャンの検出結果を解決する必要がある

説明: Defender for Cloud の DevOps セキュリティで、コード リポジトリに脆弱性が見つかりました。 リポジトリのセキュリティ態勢を改善するために、これらの脆弱性を修復することを強くお勧めします。 (関連ポリシーはありません)

重大度: 中

コード リポジトリでコードとしてのインフラストラクチャ スキャンの検出結果を解決する必要がある

説明: Defender for Cloud の DevOps セキュリティで、リポジトリのコード セキュリティ構成の問題としてインフラストラクチャが検出されました。 表示された問題はテンプレート ファイルで検出されました。 関連するクラウド リソースのセキュリティ態勢を改善するために、これらの問題を修復することを強くお勧めします。 (関連ポリシーはありません)

重大度: 中

GitHub リポジトリでコード スキャンを有効にする必要がある

説明: GitHub では、コード スキャンを使用してコードを分析し、コード内のセキュリティの脆弱性とエラーを見つけます。 コード スキャンを使用すると、コード内の既存の問題を検出、トリアージして、その修正に優先度を付けることができます。 また、コード スキャンによって、開発者が新しい問題を混入するのを防ぐことができます。 特定の日時にスキャンを実行するようにスケジュールすることや、リポジトリで特定のイベント (プッシュなど) が発生した場合にスキャンをトリガーすることができます。 コード スキャンによって、コード内で潜在的な脆弱性やエラーが検出された場合、GitHub では、リポジトリにアラートが表示されます。 脆弱性とは、プロジェクトの秘密性、一貫性、または可用性を損なうために悪用される可能性のある、プロジェクトのコードの問題です。 (関連ポリシーはありません)

重大度: 中

GitHub リポジトリでシークレット スキャンを有効にする必要がある

説明: GitHub は、リポジトリに誤ってコミットされたシークレットの不正使用を防ぐために、既知の種類のシークレットについてリポジトリをスキャンします。 シークレット スキャンでは、GitHub リポジトリ内に存在するすべてのブランチで Git 履歴全体がスキャンされ、シークレットが探されます。 シークレットの例として、サービス プロバイダーが認証のために発行する場合があるトークンと秘密キーがあります。 シークレットがリポジトリにチェックインされると、リポジトリへの読み取りアクセス権を持つすべてのユーザーは、そのシークレットを使用して、それらの権限で外部サービスにアクセスできます。 シークレットは、プロジェクトのリポジトリの外部にある専用の安全な場所に保存する必要があります。 (関連ポリシーはありません)

重大度: 高

GitHub リポジトリで Dependabot スキャンを有効にする必要がある

説明: GitHub は、リポジトリに影響するコード依存関係の脆弱性を検出すると、Dependabot アラートを送信します。 脆弱性とは、プロジェクトあるいはそのコードを利用する他のプロジェクトにおいて、秘密性、一貫性、可用性を損なうために悪用されうる、プロジェクトコードの問題です。 脆弱性の種類、重要度、攻撃の方法は様々です。 セキュリティの脆弱性があるパッケージにコードが依存している場合、この脆弱性のある依存関係が原因で、さまざまな問題が発生する可能性があります。 (関連ポリシーはありません)

重大度: 中