[ACM] 証明書の全リージョン証明書の有効期限チェックをCLIで実施してみた

はじめに

AWSチームのすずきです。

AWSが SSL証明書のマネージドサービスとして提供する AWS Certificate Manager (ACM)、 サーバ証明書を無料で作成し、AWSのELB、CloudFrontで利用する事が可能です。

ACMで作成した証明書の有効期限はデフォルトで13ヶ月、その有効期限が失効する60日前に自動更新される仕様ですが、 自動更新条件を満たさない場合、メールによるドメイン認証手続きが必要になるとの注意喚起の案内がありました。

今回、ACMによる有効期限の自動更新条件を満たさず、ドメイン認証による手動更新も実施されていないため、失効の恐れがある証明書の確認を、 AWS CLIを利用して全リージョンを対象に行う機会がありましたので、紹介させて頂きます。

スクリプト

環境

  • 動作確認バージョン: aws-cli/1.10.56
  • 「jq」は別途導入しました

仕様

  • 利用可能なリージョンを「describe-regions」で取得します
  • 登録されたACM証明書、「list-certificates」「describe-certificate」で取得し、「jq」のクエリを利用して、InUseBy(ELB,CloudFrontで利用)、NotAfter(証明書の失効日)を満たすものを抽出します
# Check account ID
aws sts get-caller-identity | jq .Account

# Get reference date
ref_unixtime=`date -d '50 days' +%s`

# Get AWSregions
aws --region us-east-1 ec2 describe-regions | jq -r .Regions[].RegionName | while read region
  do
    echo ${region}
    # Get list-certificates
    aws --region ${region} acm  list-certificates | jq -r .CertificateSummaryList[].CertificateArn | while read certificate_arn
      do
      # Get describe-certificate
      aws --region ${region} acm describe-certificate \
       --certificate-arn "${certificate_arn}"  \
       | jq 'select (.Certificate.InUseBy != null)' \
       | jq "select (.Certificate.NotAfter < ${ref_unixtime})" \
       | jq '.Certificate| { Arn: .CertificateArn, Subject: .SubjectAlternativeNames, Expire: .NotAfter|todate, Created: .CreatedAt|todate}'
    done
  done

実行例

  • 2017/9に失効する証明書を抽出しています。
ap-south-1
eu-west-2
eu-west-1
ap-northeast-2
ap-northeast-1
{
  "Arn": "arn:aws:acm:ap-northeast-1:000000000000:certificate/cdb6ba69-9042-4df6-848b-000000000000",
  "Subject": [
    "*.classmethod.jp",
    "classmethod.jp"
  ],
  "Expire": "2017-09-09T12:00:00Z",
  "Created": "2016-08-09T10:53:26Z"
}
sa-east-1
ca-central-1
ap-southeast-1
ap-southeast-2
eu-central-1
us-east-1
{
  "Arn": "arn:aws:acm:us-east-1:000000000000:certificate/0b70266d-2823-48b8-8791-000000000000",
  "Subject": [
    "*.classmethod.jp",
    "classmethod.jp"
  ],
  "Expire": "2017-09-09T12:00:00Z",
  "Created": "2016-08-09T10:50:05Z"
}
us-east-2
us-west-1
us-west-2

まとめ

自動更新対象外となったSSL証明書、放置して失効させた場合、該当のシステムに重大な影響が及ぶ事が懸念されます。

ACMによる確実な証明書の更新を望む場合、FQDN(完全修飾ドメイン名)を明示したシングル(マルチ)ドメイン証明書を各システムごとに発行し、利用される事をお薦めします。 (ACMではデフォルトで100個までサーバ証明書を作成する事が可能です。更に多くの証明書を必要とする場合も、上限緩和が可能です)

また、複数ホスト名に対応したワイルドカード証明書をACMで発行し利用されている場合、 AWSからのドメイン管理者宛に送付される案内のメールを確認できる環境の整理と合わせ、 今回紹介させて頂いたスクリプトなどによる証明書の有効期限確認も実施頂ければと思います。