AWS は、Amazon Elastic Container Registry (Amazon ECR)などのレジストリ内のコンテナイメージの署名と検証に対するネイティブ AWSサポートを提供するために、AWS Signer Container Image Signing (AWS Signer)をリリースした。AWS Signerはコード署名証明書、公開鍵、秘密鍵を管理し、ライフサイクル管理ツールを提供する。
その他の機能としてクロスアカウント署名、署名有効期間、プロファイル・ライフサイクル管理がある。クロスアカウント署名では、制限付きアカウントで署名プロファイルを作成および管理ができるため、これらの権限を持つ個人の数を減らせる。成果物に署名するために必要に応じて他のアカウントに権限を付与できる。AWS CloudTrailは両方のアカウント内のアクティビティの監査ログを提供するために使用できる。
署名の有効期間は自己期限付きプロファイルを作成するために使用できる。署名プロファイルの作成時に有効期間を指定できる。有効期間を指定しない場合は、デフォルト値の135ヶ月(最大値)が使用される。
aws signer put-signing-profile \
--profile-name my_conatiner_signing_profile \
--platform-id Notation-OCI-SHA384-ECDSA \
--signature-validity-period value=10, type='MONTHS'
プロファイルはキャンセルまたは取り消すこともできる。キャンセルされたプロファイルは新しい署名を生成するために使用できない。署名プロファイルを取り消すと、取り消し後に作成された署名はすべて無効になる。これは署名を取り消すと、その署名で署名されたコンテナをデプロイするときに検証が失敗するのとは異なる。取り消しは元に戻せないため、注意が必要である。以下の例では、Java SDK を使用して署名を取り消している。
package com.examples;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.signer.AWSSigner;
import com.amazonaws.services.signer.AWSSignerClient;
import com.amazonaws.services.signer.model.RevokeSignatureRequest;
public class RevokeSignature {
public static void main(String[] s) {
String credentialsProfile = "default";
String signingJobId = "jobID";
String revokeReason = "Reason for revocation";
// Create a client.
final AWSSigner client = AWSSignerClient.builder()
.withRegion("region")
.withCredentials(new ProfileCredentialsProvider(credentialsProfile))
.build();
// Revoke a signing job
client.revokeSignature(new RevokeSignatureRequest()
.withJobId(signingJobId)
.withReason(revokeReason));
}
}
AWS SignerはオープンソースのCloud Native Computing Foundation (CNCF) NotaryプロジェクトであるNotationと統合している。Notation GitHubページで説明されているように、Notationは「署名は汎用的なものであり、その他の目的にも使用できるが、gitのコミット署名をチェックするのと同様のセキュリティ」をを提供するとみなすことができる。NotationはOpen Containers Initiative(OCI)のディストリビューション機能を利用して、シグネチャと成果物を関連するイメージとともにレジストリに保存する。
AWS SignerはAWS Lambdaとも統合している。これにより、AWS Lambdaで検証可能な認証コードパッケージを生成するワークフローが可能になる。ワークフローではソースと宛先のS3バケットを作成する必要がある。AWS Signerは、ソースバケットからコードパッケージを取得し、署名して宛先バケットに預けることができる。
AWS Signerの詳細はリリースのブログ投稿で参照できる。執筆時点では、AWS SignerはAWS Lambda、Amazon FreeRTOS、AWS IoT Device Management、Amazon ECR、Amazon EKS、AWS Certificate Manager、CloudTrailで使用できる。サポートされているリージョンのリストはAWSのドキュメントに掲載している。