AzureがよくわからなくてもTrustedSigningを設定するまで

コード署名を安価かつ手軽に、CI/CDを通じて行えるサービスがTrusted Signingです。
$9.99/月は魅力的ですね

残念ながら単独のSaaSではなくAzureのサービスの一つのため
IaaSとしてAzureのセットアップ一式が必要になります。


GitHub Actionsでの対応はこちら

https://qiita.com/yoshi-taka/items/cb5628cd980d39bd29e1



# 全体像

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37384/3146e882-64a0-da60-0f24-d934a3df3ff8.png)

https://learn.microsoft.com/ja-jp/azure/trusted-signing/overview

(1) Subscription 課金周り AWSの`アカウント`相当 無料あり
└ (2) Resource Group
　 └ (3)コード署名アカウント 各サービス相当
　 　 ├ (4) ID検証 作成者(組織)の存在を検証する 
　 　 └ (5) Certificate Profile 証明書関係。これがゴール 有料

# (1) Subscriptionの作成
まずは大枠を作りましょう。ここは指示通りで悩むところは少ないです

- トライアル時は無料枠を選ぶこと
    - といっても署名プラン代金以外はほぼ0円
    - 本番運用時はいろいろ割引プランがあるため適宜検討する
- 無料でもクレカが必要になります。1ドルオーソリが走ります

:warning:  Subscriptionを作るとあとでフォローアップ電話が来ます

なおEntra ID(Active Directory)にユーザーアカウントがあったとしても、
Entra IDはAzureサービスではない(??)ためSubscriptionはありません

# リソースプロバイダーを登録する
ここからTrusted Signingの公式ガイドを読んでいきます

https://learn.microsoft.com/ja-jp/azure/trusted-signing/quickstart

最初にSubscriptionに対して設定からリソースプロバイダーを登録します
リソースグループではないので地味に注意

# (2)と(3) コード署名アカウントを作成する

Azure側、公式ガイドともに機械翻訳のため整合性が取れておらず、使われている単語に注意しましょう

ここではコード署名アカウントと同時にリソースグループを作ります。
今度はポータルトップに飛んで、コード署名アカウントを選択後、設定していきます。


リージョンは初期設定でよいでしょう。
コード署名のプランを選択します。
大体の場合basicの$9.99/月でよさそうです

https://learn.microsoft.com/ja-jp/azure/trusted-signing/how-to-change-sku

# IAMでコード署名アカウントの中身を操作できるようにする
初期設定だと権限がないため`コード署名アカウント`自体は作れても証明書が作れません
IAMが別管理です

https://learn.microsoft.com/ja-jp/azure/trusted-signing/tutorial-assign-roles

上記ページの表の通り、一通りこなすにはオーナーであってもロールが追加で2つ必要です。

コード署名アカウントに付随するIAMページから、操作したいユーザー(自分)にロールを付与します。
全体のIAMページではない模様。
ロール検索時は機械翻訳に惑わされず`Code`あたりで検索しましょう
ロールはまとめて割当できないので一つずつ行うこと

# (4) ID検証する
https://learn.microsoft.com/ja-jp/azure/trusted-signing/quickstart

証明書作成の前に、署名する組織自体を検証します。

本番運用時はPublicがよさそうですが検証に長い時間がかかります。
トライアル時はPrivateがよさそうです。

# (5) Certificate Profile を作る
ゴールです

https://learn.microsoft.com/ja-jp/azure/trusted-signing/quickstart

必要に応じて(4)同様Public TrustかPrivate Trustを選べばOK

- VBS Enclaveを使いたい方にはこの記事は不要でしょう
- Private Truste CI PolicyのCIはContinuous Integrationではありません。忘れてください

# Public証明書の注意点
(1) ビジネス識別子は納税者番号を選択し法人番号を入力しましょう
うまくいけばすぐにメールが来て、クリック後1時間かからず認証されます
変な識別子を選択するとすさまじく時間がかかった上に書類をたくさん求められた挙げ句拒絶されます
>現時点での信頼された署名でオンボードできるのは、3 年以上の検証可能な税金に関する履歴を持つ法人だけです。 より迅速なオンボーディング プロセスのために、検証対象の法人のパブリック レコードが最新であることを確かめます。

アーリースタートアップ等で3年未満の場合は不明です

法人番号は普通にWeb検索すればよく、登記などの`会社法人等番号`とは異なります(実質ほぼ同じですが)

(2) ID検証についてうまくいかず相談したくても、Azureサポートは契約しても対象外です。
Microsoft Q&AサイトかStack Overflowで公開質問になるとのこと

https://learn.microsoft.com/ja-jp/azure/trusted-signing/faq

>信頼された署名での ID 検証に関する質問については、Microsoft Q&A (Azure の信頼された署名のタグを使用) または Stack Overflow (信頼された署名のタグを使用) を使用して、お問い合わせください。 Azure サポートは、信頼された署名の ID 検証の問題を解決しません。

(3) 住所など各種情報は日本語で入力してもOKです



# ここからGitHub Actions作業へ
https://qiita.com/yoshi-taka/items/cb5628cd980d39bd29e1

# 全体イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37384/4f38ce02-2ac1-0ce1-1efa-d50f80a8d018.png)

certificate profileを増減してもクライアント側やその他IAMロールを修正する必要はありません

# Q&A
- 東京リージョンはありますか？
  - 今はありません
- EV証明書はありますか
  - 発行する予定もないとのこと

https://learn.microsoft.com/ja-jp/azure/trusted-signing/faq


# まとめ
IaaSのセットアップになるのでなかなか大変です。
しかもこの記事には本番運用に必要なIAMやセキュリティ周りはほぼ含まれていません。

AWSでも同様のサービスを提供してほしいですね


# おまけ: セキュリティ周り
AWSのSCPとSecurity Hub相当があるのでそれを使いました。
コンピューティングサービス周りは片っ端からブロックし、適宜推奨に基づいて設定

# おまけ：更新
ID検証は数年に一度更新が必要です
60日前にメールが来るので画面から更新しましょう
https://learn.microsoft.com/ja-jp/azure/trusted-signing/how-to-renew-identity-validation

certificate profileを作り直す必要があります

タイムスタンプサーバは署名作業のときだけ利用します
現在デフォルトのMSのタイムスタンプサーバは期限が短いので
ほかのタイムスタンプサーバを使ったほうがよさそうです

## 証明書の期限
Trusted Signing関係ないですが念のため
証明書自体の期限は非常に短いです
それをタイムスタンプの副署(counter-signature)でカバーします
期限がどれくらいかはタイムスタンプサーバ次第