はじめに
1つのリバースプロキシ上で複数のドメインを管理するというケースはよくあると思います。また、それぞれのドメインをLet's Encryptを利用してHTTPS対応することも当たり前のようにあることかと思います。
Let's Encryptには、Route53によるDNSレコード認証と証明書発行を自動的に行うdns-route53プラグインというものが存在します。このプラグインを利用することで、証明書の発行と更新が自動化され、証明書管理にかかる手間が軽減されます。
複数のAWSアカウントへの対応
dns-route53プラグインは、デフォルトでは~/.aws/
ディレクトリ以下で管理されるconfigおよびcredentialsのdefault
プロファイルを参照して動作します。企業においてはAWSアカウントが部門やプロジェクトごとに存在し、これらを複数のプロファイルを管理しているケースも当たり前のようにあるかと思います。
また、部門やプロジェクトごとにドメインあるいはサブドメインを各AWSアカウント配下のRoute 53で管理しているケースもあるかと思いますし、1つのリバースプロキシ内で異なる部門やプロジェクトのドメインをホストしているケースもあると思います。
しかし、通常のcertbotコマンドの実行方法は、デフォルトのプロファイルとして設定されたAWSアカウントを対象していますので、そのままでは他のAWSアカウントで管理されているドメイン向けの証明書発行・更新を行うことが出来ません。
他のAWSアカウント(プロファイル)で管理されているドメインに対する証明書発行・更新は、次の手順をもとに進めることで対応することが出来ます。
手順
1. プロファイルを追加する
~/.aws/config
~/.aws/credentials
へそれぞれプロファイルを追加します。
例
ここでは、testdrive
というプロファイルを新たに追加しています。
[default]
region = ap-northeast-1
output = json
[testdrive]
region = ap-northeast-1
output = json
[default]
aws_access_key_id = AKIAXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[testdrive]
aws_access_key_id = AKIAXXXXXXXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
2. certbotコマンドを実行する
AWS_PROFILE
変数をセットした状態で、certbotコマンドを実行します。
AWS_PROFILE=testdrive \
certbot certonly \
--dns-route53 \
-d '*.example.net' \
-d 'example.net' \
--email admin@example.net \
-n --agree-tos \
--key-type rsa \
--rsa-key-size 2048
2を実行すると証明書が発行されますので、発行された証明書をWebサーバあるいはリバースプロキシの対応するドメインに対して設定します。