ハンズオン(簡易版): ACM入門

1. ACM証明書の作成 (DNS認証: handson-cli-acm.<事前に用意した独自ドメイン>-certificate)

手順の目的 [why]

ACMリソース"handson-cli-acm.<事前に用意した独自ドメイン>-certificate"を作成します。

設定値の指定

設定値の指定

手順に必要な設定値を変数に格納をします。

0. ACM証明書が存在するリージョン

ACM証明書が存在するリージョンを指定します。

コマンド:

export AWS_DEFAULT_REGION='us-east-1'

1. ACM上のドメイン名

ACM上のドメイン名を指定します。

変数の設定:

DIR_TMP="${HOME}/environment/tmp-handson-cli-acm"

変数の設定:

FILE_TMP="${DIR_TMP}/handson-cli-acm-domain.tmp" \
  && echo ${FILE_TMP}

結果(例):

${HOME}/environment/tmp-handson-cli-acm/handson-cli-acm-domain.tmp

コマンド:

source ${FILE_TMP}

変数の設定:

HOST_NAME='handson-cli-acm'

変数の設定:

ACM_DOMAIN_NAME="${HOST_NAME}.${DOMAIN_NAME}" \
  && echo ${ACM_DOMAIN_NAME}

結果(例):

handson-cli-acm.<事前に用意した独自ドメイン>

2. ACM証明書タグ名

ACM証明書タグ名を指定します。

変数の設定:

ACM_CERTIFICATE_TAG_NAME="${ACM_DOMAIN_NAME}-certificate" \
  && echo ${ACM_CERTIFICATE_TAG_NAME}

結果(例):

handson-cli-acm.<事前に用意した独自ドメイン>-certificate

3. 一時ファイルディレクトリ

一時ファイルディレクトリを指定します。

変数の設定:

DIR_TMP="${HOME}/environment/tmp-handson-cli-acm"

ディレクトリが存在することを確認します。

コマンド:

ls -d ${DIR_TMP}

結果(例:存在する場合):

${HOME}/environment/tmp-handson-cli-acm

ディレクトリが存在しない場合は作成します。

コマンド:

mkdir -p ${DIR_TMP}

4. 一時ファイル名

一時ファイル名を指定します。

変数の設定:

FILE_TMP_ACM_CERTIFICATE="${DIR_TMP}/$(date +%Y-%m-%d)-acm-${ACM_CERTIFICATE_TAG_NAME}-${AWS_DEFAULT_REGION}.json" \
  && echo ${FILE_TMP_ACM_CERTIFICATE}

結果(例):

${HOME}/environment/tmp-handson-cli-acm/2021-12-13-acm-handson-cli-acm.<事前に用意した独自ドメイン>-certificate-us-east-1.json

設定値の確認

各変数に正しい設定値が格納されていることを確認しながら保存します。

変数の確認:

cat << END

  # 0. AWS_DEFAULT_REGION:"us-east-1"
       AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}"

  # 1. ACM_DOMAIN_NAME:"handson-cli-acm.<事前に用意した独自ドメイン>"
       ACM_DOMAIN_NAME="${ACM_DOMAIN_NAME}"
  # 2. ACM_CERTIFICATE_TAG_NAME:"handson-cli-acm.<事前に用意した独自ドメイン>-certificate"
       ACM_CERTIFICATE_TAG_NAME="${ACM_CERTIFICATE_TAG_NAME}"
  # 3. DIR_TMP:"${HOME}/environment/tmp-handson-cli-acm"
       DIR_TMP="${DIR_TMP}"
  # 4. FILE_TMP_ACM_CERTIFICATE:"${HOME}/environment/tmp-handson-cli-acm/2021-12-13-acm-handson-cli-acm.<事前に用意した独自ドメイン>-certificate-us-east-1.json"
       FILE_TMP_ACM_CERTIFICATE="${FILE_TMP_ACM_CERTIFICATE}"

END

下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。

処理の実行

ACM証明書の作成

ACM証明書の作成します。

変数の確認:

cat << END

  # ACM_DOMAIN_NAME:"handson-cli-acm.<事前に用意した独自ドメイン>"
    ACM_DOMAIN_NAME="${ACM_DOMAIN_NAME}"
  # FILE_TMP_ACM_CERTIFICATE:"${HOME}/environment/tmp-handson-cli-acm/2021-12-13-acm-handson-cli-acm.<事前に用意した独自ドメイン>-certificate-us-east-1.json"
    FILE_TMP_ACM_CERTIFICATE="${FILE_TMP_ACM_CERTIFICATE}"

END

コマンド:

aws acm request-certificate \
  --domain-name ${ACM_DOMAIN_NAME} \
  --validation-method DNS \
  > ${FILE_TMP_ACM_CERTIFICATE}

cat ${FILE_TMP_ACM_CERTIFICATE}

結果(例):

{
  "CertificateArn": "arn:aws:acm:us-east-1:XXXXXXXXXXXX:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

ACM証明書のARN取得

ACM証明書のARN取得します。

コマンド:

ACM_CERTIFICATE_ARN=$( \
  cat ${FILE_TMP_ACM_CERTIFICATE} \
    | jp.py "CertificateArn" \
    | sed 's/\"//g' \
) \
  && echo ${ACM_CERTIFICATE_ARN}

結果(例):

arn:aws:acm:us-east-1:XXXXXXXXXXXX:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

タグ情報の設定

タグの対象となるリソースの識別子を指定します。

変数の設定:

ACM_RESOURCE_ID=${ACM_CERTIFICATE_ARN} \
  && echo ${ACM_RESOURCE_ID}

結果(例):

arn:aws:acm:us-east-1:XXXXXXXXXXXX:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

タグキーを指定します。

変数の設定:

ACM_TAG_KEY='Name'

タグ値を指定します。

変数の設定:

ACM_TAG_VALUE=${ACM_CERTIFICATE_TAG_NAME} \
  && echo ${ACM_TAG_VALUE}

結果(例):

handson-cli-acm.<事前に用意した独自ドメイン>-certificate

タグを作成します。

変数の確認:

cat << END

  # ACM_CERTIFICATE_ARN:"arn:aws:acm:us-east-1:XXXXXXXXXXXX:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    ACM_CERTIFICATE_ARN="${ACM_CERTIFICATE_ARN}"
  # ACM_TAG_KEY:"Name"
    ACM_TAG_KEY="${ACM_TAG_KEY}"
  # ACM_TAG_VALUE:"handson-cli-acm.<事前に用意した独自ドメイン>-certificate"
    ACM_TAG_VALUE="${ACM_TAG_VALUE}"

END

コマンド:

aws acm add-tags-to-certificate \
  --certificate-arn ${ACM_CERTIFICATE_ARN} \
  --tags "Key=${ACM_TAG_KEY},Value=${ACM_TAG_VALUE}"

結果(例):

(出力なし)

完了確認

「ACM証明書タグ名"handson-cli-acm.<事前に用意した独自ドメイン>-certificate"が存在する。」ことを確認します。

コマンド:

for i in $( 
  aws acm list-certificates \
    --query "CertificateSummaryList[].CertificateArn" \
    --output text \
); do
  j=$( \
    aws acm list-tags-for-certificate \
      --certificate-arn ${i} \
      --query "Tags[?Key == \`Name\` && Value == \`${ACM_CERTIFICATE_TAG_NAME}\`].Value" \
      --output text \
  )
  if [ "${j}x" != 'x' ]; then echo "${j}"; fi
done

結果(例):

handson-cli-acm.<事前に用意した独自ドメイン>-certificate

課題

list-certificatesコマンドがタグ表示できないため、同名の証明書が複数ある場合、全ての証明書をlist-tags-for-certificateコマンドでタグの有無をチェックするしか方法がない。

一時ファイルを削除します。

コマンド:

rm ${FILE_TMP_ACM_CERTIFICATE}

結果:

(出力なし)

手順の完了

(参考) マネジメントコンソールの確認

  • ACMダッシュボード( https://console.aws.amazon.com/acm/home#/welcome )にアクセスします。

  • 右上のリージョンメニューから"バージニア北部"を選択します。

  • 左ペインの"証明書を一覧"をクリックします。

証明書一覧(画面)

  • 一覧にドメイン名"handson-cli-acm.<事前に用意した独自ドメイン>"の証明書が表示されていることを確認します。