Skip to content

Instantly share code, notes, and snippets.

@kkamegawa
Created December 11, 2022 08:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kkamegawa/83d96629cd8a0f8e733fe0bc64026f45 to your computer and use it in GitHub Desktop.
Save kkamegawa/83d96629cd8a0f8e733fe0bc64026f45 to your computer and use it in GitHub Desktop.

パイプラインのセキュリティ強化に対する改善を行いました - Sprint 213

今回の更新では、Azure DevOpsのセキュリティを強化するための改良が含まれています。Azure Container RegistryのDocker Registryサービス接続を作成する際に、システム割り当てManaged Identityが使用できるようになりました。さらに、エージェントプールのアクセス管理を強化し、YAMLパイプライン内でリソースの使用を指定できるようになりました。最後に、フォークされたパブリック GitHub リポジトリの GitHub アクセストークンを読み取り専用スコープに制限しています。

詳しくは、以下のリリースノートをご覧ください。

Copy Linkアクションを使用して、特定のワークアイテムコメントへのリンクをコピーできるようになりました。その後、そのリンクを他のワークアイテムコメントや説明に貼り付けることができます。クリックすると、そのワークアイテムが開かれ、コメントがハイライト表示されます。

Gif to demo copy comments link.

この機能は、このコミュニティの提案チケットに基づき、優先的に使用されました。

注意事項

この機能はNew Boards Hubs previewを有効にする必要があります。

Azure Container Registry 用の Docker Registry サービス接続を作成するときに、システム割り当て Managed Identity を使用できます。これにより、セルフホストされた Azure Pipelines エージェントに関連付けられた Managed Identity を使用して Azure Container Registry にアクセスできるため、クレデンシャルを管理する必要がなくなります。

New Docker Registry Service Connection for Changes to Approvals

注意事項

Azure Container Registry にアクセスするために使用する Managed Identity には、適切な Azure Role Based Access Control (RBAC) の割り当て(例:AcrPull または AcrPush ロールなど)が必要です。

サービス接続などの保護されたリソースのパイプライン権限を制限すると、関連するAudit Event Log(監査イベントログ)に、リソースがそのプロジェクトで正常に認証されたことが正しく記載されるようになりました。

Pipeline Permissions for Changes to Approvals

Successfully Authorized for Changes to Approvals

Azure DevOpsでは、クラシックビルドパイプライン、クラシックリリースパイプライン、タスクグループ、およびデプロイメントグループの作成を無効にすることで、Organization内でYAMLパイプラインのみ使用可能にできます。既存のクラシック パイプラインに関しては引き続き実行可能で、それらを編集することができますが、新しいパイプラインの作成はできません。

Organizationレベルまたはプロジェクト レベルで、対応するトグルをオンにしてクラシック パイプラインの作成を無効にできます。このトグルは、Project / Organization Settings -> Pipelines -> Settings にあります

Disable Creation Of Classic Build and Classic Pipeline for Changes to Approvals

トグルの状態は、デフォルトではオフになっており、状態を変更するには管理者権限が必要です。Organizationレベルでトグルがオンになっている場合、すべてのプロジェクトで無効化が強制されます。それ以外の場合は、各プロジェクトで無効化を実施するかどうかを自由に選択できます。

クラシックパイプラインの作成を無効にすると、クラシックパイプライン、タスクグループ、デプロイメントグループの作成に関連するREST APIが失敗するようになります。YAMLパイプラインを作成するREST APIは動作します。

クラシック パイプラインの作成を無効にすることは、既存のOrganizationではオプトインです。新しいOrganizationでは、当面の間、オプトインとなります。

サービスフックを使うと、パイプラインの状態変化に関連するイベントに反応して反応することができます。これまでは、パイプラインの実行とステージの状態変化に対してサービスフックを設定することができました。

今回のアップデートで、パイプラインのジョブの状態が変化したときに実行するサービスフックを設定できるようになりました。新しいサービスフックのペイロード構造は、次の例のようになります。

{
    "subscriptionId": "8d91ad83-1db5-4d43-8c5a-9bb2239644b1",
    "notificationId": 29,
    "id": "fcad4962-f3a6-4fbf-9653-2058c304503f",
    "eventType": "ms.vss-pipelines.job-state-changed-event",
    "publisherId": "pipelines",
    "message":
    {
        "text": "Run 20221121.5 stage Build job Compile succeeded.",
        "html": "Run 20221121.5 stage Build job <a href=\"https://dev.azure.com/fabrikamfiber/fabrikamfiber-viva/_build/results?buildId=2710088\">Compile</a> succeeded.",
        "markdown": "Run 20221121.5 stage Build job [Compile](https://dev.azure.com/fabrikamfiber/fabrikamfiber-viva/_build/results?buildId=2710088) succeeded."
    },
    "detailedMessage":
    {
        "text": "Run 20221121.5 stage Build job Compile succeeded.",
        "html": "Run 20221121.5 stage Build job <a href=\"https://dev.azure.com/fabrikamfiber/fabrikamfiber-viva/_build/results?buildId=2710088\">Compile</a> succeeded.",
        "markdown": "Run 20221121.5 stage Build job [Compile](https://dev.azure.com/fabrikamfiber/fabrikamfiber-viva/_build/results?buildId=2710088) succeeded."
    },
    "resource":
    {
        "job":
        {
            "_links":
            {
                "web":
                {
                    "href": "https://dev.azure.com/fabrikamfiber/fabrikamfiber-viva/_build/results?buildId=2710088"
                },
                "pipeline.web":
                {
                    "href": "https://dev.azure.com/fabrikamfiber/fabrikamfiber-viva/_build/definition?definitionId=4647"
                }
            },
            "id": "e87e3d16-29b0-5003-7d86-82b704b96244",
            "name": "Compile",
            "state": "completed",
            "result": "succeeded",
            "startTime": "2022-11-21T16:10:28.49Z",
            "finishTime": "2022-11-21T16:10:53.66Z"
        },
        "stage": { ... },
        "run": { ... },
        "pipeline": { ... },
        "repositories": [ ... ]
    },
    "resourceVersion": "5.1-preview.1",
    "createdDate": "2022-11-21T16:11:02.9207334Z"
}

Run、ステージ、およびジョブ状態変更サービスフックイベントには、パイプライン実行に関連するソースコードのバージョン情報を表示するrepositoryプロパティが含まれるようになりました。たとえば、以下のようになります。

"repositories":
[
    {
        "type": "Git",
        "change":
        {
            "author":
            {
                "name": "Fabrikam John",
                "email": "john@fabrikamfiber.com",
                "date": "2022-11-11T15:09:21Z"
            },
            "committer":
            {
                "name": "Fabrikam John",
                "email": "john@fabrikamfiber.com",
                "date": "2022-11-11T15:09:21Z"
            },
            "message": "Added Viva support"
        },
        "url": "https://fabrikamfiber@dev.azure.com/fabrikamfiber/fabrikamfiber-viva/_git/fabrikamfiber"
    },
    {
        "type": "GitHub",
        "change":
        {
            "author":
            {
                "name": "Fabrikam John",
                "email": "john@github.com",
                "date": "2022-08-11T15:05:20Z"
            },
            "committer":
            {
                "name": "Fabrikam John",
                "email": "john@github.com",
                "date": "2022-08-11T15:05:20Z"
            },
            "message": "Added Viva open source REST API library"
        },
        "url": "https://api.github.com/repos/FabrikamFiber/Viva"
    }
]

General Settings - Update REST API を呼び出すには、スコープ Project と Team -> Read & Write 権限を持つ PAT が必要になりました。

Project and Team

エージェントプールを使用すると、パイプラインを実行するマシンを指定し、管理できます。

以前は、カスタムエージェントプールを使用する場合、どのパイプラインがそれにアクセスできるかを管理するのは、粒度が粗いものでした。すべてのパイプラインの使用を許可することも、各パイプラインに許可を求めることも可能です。残念ながら、一度パイプラインにエージェントプールへのアクセス許可を与えると、パイプラインのUIを使用してそれを取り消すことができませんでした。

Azure Pipelinesから、エージェントプールに対してきめ細かなアクセス管理ができるようになりました。Service Connectionsのパイプラインのアクセス権管理と同じような操作感です。

FabrikamFiber Agent Pool for Changes to Approvals

サービス接続や環境などの保護されたリソースを作成する際に、Grant access permission to all pipelines(すべてのパイプラインにアクセス権限を付与する)チェックボックスを選択するオプションがあります。これまでは、このオプションはデフォルトでチェックされていました。

これにより、パイプラインが新しい保護されたリソースを使用しやすくなる一方で、逆に、誤って多くのパイプラインにリソースへのアクセス権を付与してしまう状態になっていました。

セキュア バイ デフォルトの選択を促進するために、Azure DevOps では、チェックボックスをオフにしたままにしています。

New Generic Service Connection for Changes to Approvals

Azure DevOpsを使用すると、公開GitHubリポジトリの構築とテストができます。GitHubの公開リポジトリを持つことで、世界中の開発者とコラボレーションできますが、フォークされたリポジトリからのプルリクエスト(PR)の構築に関連するセキュリティの懸念が伴います

フォークされたGitHubリポジトリからのPRが、あなたのリポジトリに望ましくない変更を加えることを防ぐために、Azure DevOpsは、GitHubアクセストークンを読み取り専用スコープに制限するようにしました。

Azure Pipelines Microsoftホストエージェントの"macos-latest"ラベルのデフォルトバージョンとして、macos-12 Montereyイメージの準備が整いました。これまでは、このラベルはmacos-11 Big Surエージェントを指していました。

macos-12 と macos-11 の違いの一覧は、GitHub の issue をご覧ください。イメージにインストールされているソフトウェアの全リストは、こちらをご確認ください。

Azure Pipelines Microsoftホストエージェントのubuntu-latestラベルのデフォルトバージョンとして、ubuntu-22.04イメージが用意されました。これまでは、このラベルはubuntu-20.04エージェントを指していました。

ubuntu-22.04とubuntu-20.04の相違点の全リストは、GitHub issueをご覧ください。イメージにインストールされているソフトウェアの全リストは、こちらをご確認ください。

注意事項

ここで議論されている機能は今後二~三週にわたって順次展開されます。

Azure DevOpsサービスを体験してみてください。

これらの機能についてどう思っているかお聞きしたいと思います。 フィードバックメニューを使用して問題を報告するか、提案を提出してください。

Make a suggestion

アドバイスや回答を必要とする質問がある場合、Stack Overflowコミュニティで聞いてください。

ありがとうございました。

Vijay Machiraju

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment