2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubActionsでTrustedSigningを使いコード署名する

Last updated at Posted at 2024-05-29

2024年4月、MicrosoftがCI/CD可能なコード署名サービスを提供開始しました。それがTrusted Signingです。

2023年6月のコード署名要件変更により、通常のコードサイニング証明書購入プロセスではCI/CDは困難であることから、心強い味方です。
サービス料金だけ見ても証明書を購入するより安価なことも見逃せません。

この記事ではTrusted SigningでCertificate Profileが作成できていることを前提として、
それを用いてGitHub Actionsで署名するところまで記載します。

AzureのセットアップからTrusted SigningでCertificate Profileを作成するまでは以下の記事です。

公式Actionの活用

MSが提供してるTrusted Signing actionを使います。

yaml例

mainにpushされたときにOIDCを使ってTrusted Signingにアクセスして署名する
署名したものをartifactとしてuploadする
distにあるexe等を署名する前提
署名後はexe上書きになります。

permissions:
  id-token: write
  contents: read

on:
  push:
    branches: [main]

jobs:
  build-and-sign:
    runs-on: windows-latest
    name: Build app and sign files with Trusted Signing
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Azure login
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      - name: Sign files with Trusted Signing
        uses: azure/trusted-signing-action@v0.3.19
        with:
          endpoint: https://eus.codesigning.azure.net/
          trusted-signing-account-name: vscx-codesigning
          certificate-profile-name: vscx-certificate-profile
          files-folder: ${{ github.workspace }}\dist
          files-folder-filter: exe,dll
          file-digest: SHA256
          timestamp-rfc3161: http://timestamp.acs.microsoft.com
          timestamp-digest: SHA256
          exclude-environment-credential: true
          exclude-workload-identity-credential: true
          exclude-managed-identity-credential: true
          exclude-shared-token-cache-credential: true
          exclude-visual-studio-credential: true
          exclude-visual-studio-code-credential: true
          exclude-azure-cli-credential: false
          exclude-azure-powershell-credential: true
          exclude-azure-developer-cli-credential: true
          exclude-interactive-browser-credential: true
      - name: upload
        uses: actions/upload-artifact@v4
        with:
          name: upload
          path: dist

OIDC化準備

おおよそAWSでのOIDCと同じです

Azure側作業

まずAzure側でCI/CD用のサービスプリンシパル(アプリケーション)を作り、
利用したいCertificate ProfileのIAMでTrusted Signing Certificate Profile Signerロールをアプリに付与。

その後該当アプリのフェデレーション資格情報を作成し、Azure リソースをデプロイする GitHub Actionsを選び、必要事項を入力する。

Azureの場合クレームで必要な情報をWebUIで打ち込めるのでAWSよりわかりやすいですね

AWS同様、フェデレーションがあればclient secretは不要です

シークレットをGitHub Actionsに登録

Azureで登録したアプリケーションの概要欄からclient-idとtenant-idは取得できます。
subscription-idはTrustedSigningで使っているsubscriptionのidです。

GitHub Actionsのシークレットに登録しておきましょう。

細かいyaml解説

  • yamlのexclude〜は不要な認証手段を無効化することで高速化します
  • endpointはTrustedSigningを設定したリージョンごとに異なります
  • 以下はreadmeから引っ張ってきているだけなので自分で命名したものに変えましょう
          trusted-signing-account-name: vscx-codesigning
          certificate-profile-name: vscx-certificate-profile

最初にあるpermissionsはOIDC用です

他のTrustedSigning actionで使えるパラメータはactionのreadmeを参照してください

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?