0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DockerのBASIC認証で作成した証明書と秘密鍵をAWS ALBで使用する方法

Posted at

##初めに
以下の手順に沿って進めます。

  1. dockerがインストールされたAmazon LinuxにBASIC認証を作成する
  2. BASIC認証で発行された秘密鍵と証明書を使用してALBを起動する

用語や認識など間違いがありましたら教えていただけると幸いです。

##手順1 BASIC認証作成

まず初めにopenssl.cnfの253行目subjectAltNameをインスタンスのプライベートアドレスに書き換えます。

[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ sudoedit /etc/pki/tls/openssl.cnf

以下は書き換えた後、catで表示させたものです。

[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ cat -n /etc/pki/tls/openssl.cnf | head -n 255 | tail -n 5
   251
   252  # Include email address in subject alt name: another PKIX recommendation
   253  subjectAltName=IP:xxx.xxx.xxx.xxx
   254  # Copy issuer details
   255  # issuerAltName=issuer:copy

その後、以下のディレクトリを作ります。

[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ mkdir certs

上記ディレクトリに上記証明書(domain.crt)、秘密鍵(domain.key)を作成します。
Enter PEM pass phrase:パスフレーズの入力を求められます。
Verifying - Enter PEM pass phrase:2度目の入力が求められます。同じ値を入力します。
なお、このパスフレーズは以降使用しません。

[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ openssl req -newkey rsa:2048 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt
Generating a 2048 bit RSA private key
........................................................................................+++
........+++
writing new private key to 'certs/domain.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

以下はすべて空白でエンターを押します。

Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

以下ではcertsディレクトリに移動しパスフレーズを削除します。
これをしないと次のエラーによりdockerの起動に失敗します。 msg="tls: failed to parse private key"
Enter pass phrase for domain.key:では先ほどのパスフレーズを入力します。

[ec2-user@ip-xxx-xxx-xxx-xxx certs]$ openssl rsa -in domain.key -out new.key
Enter pass phrase for domain.key:
writing RSA key

証明書をコピーします。

[ec2-user@ip-xxx-xxx-xxx-xxx certs]$ sudo cp certs/domain.crt /etc/pki/ca-trust/source/anchors/xxx.xxx.xxx.xxx.crt

再起動を行います。

[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ sudo update-ca-trust enable
[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ sudo update-ca-trust
[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ sudo service docker restart

パスワードを作成します。
username、passwordにそれぞれユーザー名、パスワードを入力します。

[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ docker run --entrypoint htpasswd registry:2.6.2 -Bbn username password > auth/htpasswd

プライベートレジストリ用のコンテナを起動します。

[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ docker run -d -p 5000:5000 \
--restart=always \
--name registry \
-v `pwd`/auth:/auth \
-v `pwd`/certs:/certs \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
-e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt" \
-e "REGISTRY_HTTP_TLS_KEY=/certs/new.key" \
registry:2.6.2

ログインできることを確認します。

[ec2-user@ip-xxx-xxx-xxx-xxx certs]$ docker login https://xxx.xxx.xxx.xxx:5000
Username: testuser
Password:
WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

##手順2 ALBを起動する

aws-cliを使用してログインします。
以下のアクセスキーXXXやシークレットアクセスキーYYYとなっている部分は、
IAM→ユーザーをクリック→認証情報をクリック で確認できます。

[ec2-user@ip-xxx-xxx-xxx-xxx certs]$ aws configure
AWS Access Key ID [None]: XXX
AWS Secret Access Key [None]: YYY
Default region name [None]: ap-northeast-1
Default output format [None]: json

certsディレクトリに移動しIAMに証明書をアップロードします。
my-secret-sertは証明書の名前になります。

[ec2-user@ip-xxx-xxx-xxx-xxx certs]$ aws iam upload-server-certificate --server-certificate-name my-server-cert \
--certificate-body file://domain.crt --private-key file://new.key 

ALBはVPC内にサブネットが2つ必要です。それらを作り終えたらEC2のコンソール画面に移動し、ロードバランサーをクリックします。
image.png

ALBを選択します。

image.png

HTTPSを選択します。
image.png

VPCの選択では先ほど作成したVPC、サブネットを選択します。
デフォルトの証明書の選択では、アップロードした証明書を選択します。

image.png

ルーティングの設定を以下のように行います。
image.png

ターゲットの登録では、選択したサブネット内のEC2をターゲットグループに登録できます。
以下のメッセージにより正常に作成されたかどうかを確認します。

image.png

##参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?