チュートリアル:GitHub を使用してコードとしての Azure Policy を実装するTutorial: Implement Azure Policy as Code with GitHub

コードとしての Azure Policy ワークフローを使用すると、ポリシーの定義と割り当てをコードとして管理し、それらの定義の更新ライフサイクルを制御し、コンプライアンスの結果の検証を自動化できます。An Azure Policy as Code workflow makes it possible to manage your policy definitions and assignments as code, control the lifecycle of updating those definitions, and automate the validating of compliance results. このチュートリアルでは、Azure Policy 機能と GitHub を使用して、ライフサイクル プロセスを構築する方法について説明します。In this tutorial, you learn to use Azure Policy features with GitHub to build a lifecycle process. これらのタスクは次のとおりです。These tasks include:

  • ポリシー定義と割り当てを GitHub にエクスポートするExport policy definitions and assignments to GitHub
  • GitHub で更新されたポリシー オブジェクトを Azure にプッシュするPush policy objects updated in GitHub to Azure
  • GitHub アクションからコンプライアンス スキャンをトリガーするTrigger a compliance scan from the GitHub action

既存のリソースの現在のコンプライアンスの状態を識別するためのポリシーを割り当てる方法については、クイックスタートの記事で詳しく説明しています。If you would like to assign a policy to identify the current compliance state of your existing resources, the quickstart articles explain how to do so.

前提条件Prerequisites

Azure portal から Azure Policy オブジェクトをエクスポートするExport Azure Policy objects from the Azure portal

Azure portal からポリシー定義をエクスポートするには、次の手順を実行します。To export a policy definition from Azure portal, follow these steps:

  1. Azure portal 上で [すべてのサービス] をクリックし、 [ポリシー] を検索して選択し、Azure Policy サービスを起動します。Launch the Azure Policy service in the Azure portal by clicking All services, then searching for and selecting Policy.

  2. Azure Policy ページの左側にある [定義] を選択します。Select Definitions on the left side of the Azure Policy page.

  3. [Export definitions](定義のエクスポート) ボタンを使用するか、ポリシー定義の行の省略記号を選択してから、 [Export definition](定義のエクスポート) を選択し ます。Use the Export definitions button or select the ellipsis on the row of a policy definition and then select Export definition.

  4. [Sign in with GitHub](GitHub でサインイン) ボタンを選択します。Select the Sign in with GitHub button. リソースをエクスポートする Azure Policy を承認するために GitHub で認証されていない場合は、表示される新しいウィンドウで GitHub Action に必要なアクセス権を確認し、 [Authorize AzureGitHubActions](AzureGitHubActions を承認する) を選択して、エクスポート プロセスを続行します。If you haven't yet authenticated with GitHub to authorize Azure Policy to export the resource, review the access the GitHub Action needs in the new window that opens and select Authorize AzureGitHubActions to continue with the export process. 完了すると、新しいウィンドウが自動的に閉じます。Once complete, the new window self-closes.

  5. [基本] タブで、次のオプションを設定し、 [ポリシー] タブまたは [Next : Policies](次へ: ポリシー) ボタンがページの下部にあるので選択します。On the Basics tab, set the following options, then select the Policies tab or Next : Policies button at the bottom of the page.

    • Repository filter (リポジトリ フィルター) :自分が所有しているリポジトリのみを表示するには [My repositories](マイ リポジトリ) に、GitHub アクションによるアクセスを許可したものをすべてを表示するには [All repositories](すべてのリポジトリ) に設定します。Repository filter: Set to My repositories to see only repositories you own or All repositories to see all you granted the GitHub Action access to.
    • リポジトリ:Azure Policy リソースをエクスポートするリポジトリを設定します。Repository: Set to the repository that you want to export the Azure Policy resources to.
    • ブランチ:リポジトリにブランチを設定します。Branch: Set the branch in the repository. ソース コードにさらにマージする前に更新を検証する場合は、既定以外のブランチを使用することをお勧めします。Using a branch other than the default is a good way to validate your updates before merging further into your source code.
    • ディレクトリ:Azure Policy リソースをエクスポートする "ルート レベル フォルダー"。Directory: The root level folder to export the Azure Policy resources to. このディレクトリの下のサブフォルダーは、エクスポートされるリソースに基づいて作成されます。Subfolders under this directory are created based on what resources are exported.
  6. [ポリシー] タブで、省略記号を選択し、管理グループ、サブスクリプション、またはリソース グループの組み合わせを選択して、検索範囲を設定します。On the Policies tab, set the scope to search by selecting the ellipsis and picking a combination of management groups, subscriptions, or resource groups.

  7. [Add policy definition(s)](ポリシー定義の追加) ボタンを使用して、エクスポートするオブジェクトのスコープを検索します。Use the Add policy definition(s) button to search the scope for which objects to export. 開いたサイド ウィンドウ内で、エクスポートする各オブジェクトを選択します。In the side window that opens, select each object to export. 検索ボックスまたは種類によって選択をフィルター処理します。Filter the selection by the search box or the type. エクスポートするオブジェクトをすべて選択したら、ページの下部にある [追加] ボタンを使用します。Once you've selected all objects to export, use the Add button at the bottom of the page.

  8. 選択した各オブジェクトについて、 [Only Definition](定義のみ)[Definition and Assignment(s)](定義と割り当て) など、ポリシー定義の目的のエクスポート オプションを選択し ます。For each selected object, select the desired export options such as Only Definition or Definition and Assignment(s) for a policy definition. 次に、 [Review + Export](確認 + エクスポート) タブまたは [Next : Review + Export](次へ: 確認 + エクスポート) ボタンがページ下部にあるので選択します。Then select the Review + Export tab or Next : Review + Export button at the bottom of the page.

    注意

    [Definition and Assignment(s)](定義と割り当て) オプションを選択した場合、ポリシー定義の追加時にフィルターによって設定されたスコープ内のポリシー割り当てのみがエクスポートされます。If option Definition and Assignment(s) is chosen, only policy assignments within the scope set by the filter when the policy definition is added are exported.

  9. [Review + Export](確認 + エクスポート) タブで、詳細が一致していることを確認し、ページの下部にある [エクスポート] ボタンを使用します。On the Review + Export tab, check the details match and then use the Export button at the bottom of the page.

  10. GitHub リポジトリ、ブランチ、"ルート レベル フォルダー" を確認して、選択したリソースがソース管理にエクスポートされていることを確認します。Check your GitHub repo, branch, and root level folder to see that the selected resources are now exported to your source control.

Azure Policy リソースは、選択した GitHub リポジトリと "ルート レベル フォルダー" 内の次の構造にエクスポートされます。The Azure Policy resources are exported into the following structure within the selected GitHub repository and root level folder:

|
|- <root level folder>/  ________________ # Root level folder set by Directory property
|  |- policies/  ________________________ # Subfolder for policy objects
|     |- <displayName>_<name>____________ # Subfolder based on policy displayName and name properties
|        |- policy.json _________________ # Policy definition
|        |- assign.<displayName>_<name>__ # Each assignment (if selected) based on displayName and name properties
|

GitHub で更新されたポリシー オブジェクトを Azure にプッシュするPush policy objects updated in GitHub to Azure

  1. ポリシー オブジェクトがエクスポートされると、作業を開始できるように、.github/workflows/manage-azure-policy-<randomLetters>.yml という名前の GitHub ワークフロー ファイルも作成されます。When policy objects are exported, a GitHub workflow file named .github/workflows/manage-azure-policy-<randomLetters>.yml is also created to get you started.

    注意

    GitHub ワークフロー ファイルは、エクスポートを使用するたびに作成されます。The GitHub workflow file is created each time export is used. ファイルの各インスタンスは、そのエクスポート アクション時のオプションに固有です。Each instance of the file is specific to the options during that export action.

  2. このワークフロー ファイルでは、Manage Azure Policy アクションを使用して、GitHub リポジトリ内のエクスポートされたポリシー オブジェクトに加えられた変更を Azure Policy にプッシュします。This workflow file uses the Manage Azure Policy action to push changes made to the exported policy objects in the GitHub repository back to Azure Policy. 既定では、このアクションは、Azure に存在するものとは異なるファイルのみを考慮して同期します。By default, the action considers and syncs only those files that are different from the ones existing in Azure. アクションの assignments パラメーターを使用して、特定の割り当てファイルに対して行われた変更のみを同期することもできます。You can also use the assignments parameter in the action to only sync changes done to specific assignment files. このパラメーターを使用して、特定の環境に対してのみポリシー割り当てを適用できます。This parameter can be used to apply policy assignments only for a specific environment. 詳細については、Manage Azure Policy リポジトリの Readme を参照してください。For more information, see the Manage Azure Policy repository readme.

  3. 既定では、ワークフローを手動でトリガーする必要があります。By default, the workflow must be triggered manually. これを行うには、GitHub の [Actions](アクション) を使用して、manage-azure-policy-<randomLetters> ワークフローを選択し、 [Run workflow](ワークフローの実行) の後に、 [Run workflow](ワークフローの実行) を再度選択します。To do so, use the Actions in GitHub, select the manage-azure-policy-<randomLetters> workflow, select Run workflow, and then Run workflow again.

    GitHub Web インターフェイスの [Actions]\(アクション\) タブ、ワークフロー、および [Run workflow]\(ワークフローの実行\) ボタンのスクリーンショット。

    注意

    ワークフロー ファイルは、既定のブランチ内に存在していないと、検出して手動で実行することはできません。The workflow file must be in the default branch to be detected and manually run.

  4. ワークフローにより、ポリシー オブジェクトに対して行われた変更が Azure と同期され、ログ内に状態が記録されます。The workflow syncs the changes done to policy objects with Azure and gives you the status in the logs.

    実行中のワークフローとログに記録された詳細のスクリーンショット。

  5. また、ワークフローにより、Azure Policy オブジェクトの詳細 properties.metadata も追加され、追跡できます。The workflow also adds details in Azure Policy objects properties.metadata for you to track.

    GitHub アクションに固有のメタデータで更新された Azure portal 内の Azure Policy 定義のスクリーンショット。

GitHub アクションを使用してコンプライアンス スキャンをトリガーするTrigger compliance scans using GitHub action

Azure Policy Compliance Scan アクションを使用すると、1 つまたは複数のリソース、リソース グループ、またはサブスクリプションに対して GitHub ワークフローからオンデマンドのコンプライアンス評価スキャンをトリガーし、それらのリソースのコンプライアンスの状態に基づいてワークフロー パスを変更できます。Using the Azure Policy Compliance Scan action you can trigger an on-demand compliance evaluation scan from your GitHub workflow on one or multiple resources, resource groups, or subscriptions, and alter the workflow path based on the compliance state of those resources. また、スケジュールされた時刻に実行するようにワークフローを構成して、最新のコンプライアンスの状態を都合のよいタイミングで取得することもできます。You can also configure the workflow to run at a scheduled time to get the latest compliance status at a convenient time. 必要に応じて、この GitHub アクションでは、スキャンされたリソースのコンプライアンスの状態に関するレポートを生成して、詳細な分析やアーカイブを行うこともできます。Optionally, this GitHub action can also generate a report on the compliance state of scanned resources for further analysis or for archiving.

次の例では、サブスクリプションに対してコンプライアンス スキャンを実行します。The following example runs a compliance scan for a subscription.


on:
  schedule:    
    - cron:  '0 8 * * *'  # runs every morning 8am
jobs:
  assess-policy-compliance:    
    runs-on: ubuntu-latest
    steps:         
    - name: Login to Azure
      uses: azure/login@v1
      with:
        creds: ${{secrets.AZURE_CREDENTIALS}} 

    
    - name: Check for resource compliance
      uses: azure/policy-compliance-scan@v0
      with:
        scopes: |
          /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

確認Review

このチュートリアルでは、以下のタスクを完了しました。In this tutorial, you successfully accomplished the following tasks:

  • ポリシー定義と割り当てを GitHub にエクスポートするExported policy definitions and assignments to GitHub
  • GitHub で更新されたポリシー オブジェクトを Azure にプッシュするPushed policy objects updated in GitHub to Azure
  • GitHub アクションからコンプライアンス スキャンをトリガーするTriggered a compliance scan from the GitHub action

次のステップNext steps

ポリシー定義の構造の詳細については、次の記事を参照してください。To learn more about the structures of policy definitions, look at this article: