DevOps から Azure までのエンド ツー エンドのガバナンス

この記事では、ロールベースのアクセス制御アクセス許可など、チームの健全なガバナンス プラクティスを慎重に管理および実装する方法について説明します。

Azure Resource Manager テンプレート (ARM テンプレート) に対して、Azure portal と Azure CLI を使用してアクセスを制限する Azure ロールベースのアクセス制御 (RBAC) モデルを計画し、実装するだけでは不十分です。

このモデルが DevOps 自動化にミラー化されていない場合、組織はセキュリティ バックドアを開いたままにしている可能性があります。 開発者が ARM テンプレートを介してアクセスすることはできなくても、アプリケーション コードやコードとしてのインフラストラクチャを変更し、自動化ワークフローをトリガーできる十分なアクセス許可を持っている例を考えてみましょう。 この開発者は、DevOps を介して ARM テンプレートに間接的にアクセスし、破壊的な変更を加える可能性があります。

Microsoft Entra グループを使用した単一の ID 管理プレーン

最初の手順では、Microsoft Entra ID を統合して、ID 管理ごとのシングル サインオンのベスト プラクティスを使用します。

Azure DevOps などの Azure ファースト パーティ CI 製品を使用していない場合は、ベンダーから Microsoft Entra 統合が提供されているかどうかを確認してください。

2 番目の手順では、Microsoft Entra グループを使用します。これは、ARM テンプレートの RBAC モデルに既に使用しているものと同じグループです。 個々のユーザーではなく、Microsoft Entra グループにロールを割り当てるのがベスト プラクティスです。 エンド ツー エンドのガバナンス モデルを作成するには、ARM テンプレートと DevOps に対してこの手順を実行する必要があります。

Azure DevOps は、Microsoft Entra グループ メンバーシップを含め、Microsoft Entra ID と緊密に統合されているので、同じ Microsoft Entra グループにロールの割り当てを簡単に適用できます。

Note

別の CI ベンダーを使用している場合は、グループ メンバーシップを管理するための中間論理コンテナーがある可能性があります。Microsoft Entra グループ メンバーシップが同期されていない場合は、これも保持する必要があります。

次の図は、Microsoft Entra ID が単一の ID 管理プレーンとしてどのように使用されるのかを示しています。 ARM テンプレートと DevOps ツール (この例では Azure DevOps) では、管理する必要があるのはロールの割り当てだけです。メンバーシップは、Microsoft Entra ID で管理する必要があります。 リソース名は、Azure リソースの推奨される名前付け規則省略形に従っています。

Diagram of end-to-end governance and how to access to your Azure resources, both from ARM templates and CI/CD workflows

シナリオ例: Microsoft Entra メンバーシップを使用して 1 つの手順で請負業者のアクセス権を削除する

エンド ツー エンドのガバナンスを具体化するために、シナリオ例を使用して利点を確認しましょう。

Microsoft Entra ID を単一の ID 管理プレーンとして使用している場合、"Microsoft Entra グループ メンバーシップ" を調整することで、1 つのアクションで Azure リソースへの開発者のアクセス権を削除できます。 たとえば、プロジェクトの完了時に請負業者のアクセス権を取り消す必要がある場合は、適切な Microsoft Entra グループからその請負業者のメンバーシップを削除すると、ARM テンプレートと Azure DevOps へのアクセス権が削除されます。

ロールの割り当てを使用した RBAC モデルのミラー化

十分に計画されていれば、CI ツールの RBAC モデルに Azure RBAC モデルが厳密にミラー化されます。 上の図の Microsoft Entra グループ名の例はセキュリティ ルールを示していますが、メンバーシップだけではセキュリティは適用されません。 RBAC は、プリンシパル、定義、スコープの組み合わせであり、ロールの割り当てが作成されるまで有効にならないことに注意してください。

Diagram of Microsoft Entra ID as a single identity management plane in Azure DevOps

  • この図は、contoso-admins-group という 1 つの Microsoft Entra グループのロールの割り当てを示しています。
  • この Microsoft Entra グループには、複数のサブスクリプション スコープで、Azure ARM テンプレートの所有者ロールが割り当てられています。
    • contoso-dev-sub サブスクリプション
    • contoso-prod-sub サブスクリプション
  • contoso-admins-group は、1 つのプロジェクト スコープで Azure DevOps のプロジェクト管理者グループに追加されています。

この Microsoft Entra グループには、ARM テンプレートと DevOps の両方で同様に特権ロールが割り当てられています。 このロジックに従い、ARM テンプレートの共同作成者ロールが割り当てられた開発者グループがある場合に、それが DevOps のプロジェクト管理者グループに属していると想定することはできません。

ARM テンプレートと DevOps ワークフローをセキュリティで保護する必要性を理解したら、次のことを行う必要があります。

  • RBAC モデルを確認し、ARM テンプレートに対して定義したロールと責任が CI/CD ワークフローとどのように一致するかについて考えます。
  • CI プラットフォームの ID 管理ソリューションを確認し、Microsoft Entra ID を統合します。 Microsoft Entra グループ メンバーシップを含めるのが理想的です。
  • CI ツールで提供されるロールとアクセス レベルを確認し、それらを Azure RBAC モデルと比較します。 ロールとアクセス レベルは、1 対 1 でマップされるわけではありません。 構成を確認します。 開発者に ARM テンプレートに対するアクセス権がない場合は、DevOps にもアクセスできないようにする必要があります。 最も単純な例では、運用リソースに対する "書き込み" アクセス許可を持っていない開発者は、直接アクセスして運用パイプラインの実行をトリガーできないようにする必要があります。

ガバナンスの設計とアクセス許可の詳細については、以下を参照してください。

次のステップ

ARM テンプレートと DevOps ワークフローをセキュリティで保護する必要性を理解したら、安全な方法でシークレットを管理する方法を確認します。