LoginSignup
0
0

.NET6 から TLS=true で Amazon DocumentDB に接続する

Last updated at Posted at 2023-10-25

はじめに

Linuxコンテナに配置した.NET6のアプリケーションからTLSを有効にしたDocumentDBへの接続で沼ったので、誰かがしなくて良い苦労をしないために、備忘録を残しておきます。

私の環境はmcr.microsoft.com/dotnet/aspnet:6:0をベースとしたコンテナをECSに配置していました。

TL;DR

こちらの記事にある通りですが、以下の記述をDockerfileに追記することでTLSによる通信ができるようになりました。

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base

# add AWS RDS CA bundle
ADD https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem /tmp/rds-ca/aws-rds-ca-bundle.pem
# split the bundle into individual certs (prefixed with xx)
# see http://blog.swwomm.com/2015/02/importing-new-rds-ca-certificate-into.html
RUN cd /tmp/rds-ca && cat aws-rds-ca-bundle.pem|awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ""}' \
    && for CERT in /tmp/rds-ca/cert*; do mv $CERT /usr/local/share/ca-certificates/aws-rds-ca-$(basename $CERT).crt; done \
    && rm -rf /tmp/rds-ca \
    && update-ca-certificates

WORKDIR /app
EXPOSE 80
EXPOSE 443
...
...
...

接続文字列はDocumentDBの管理画面でアナウンスがあったものをそのまま使用しています。

mongodb://<user>:<password>@<endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false

なぜ沼ったか

公式ではpemをダウンロードし、それをアプリケーション内で証明書のストアにインポートしてと書かれているからです。

恐らくそれで動く環境もあると思います。
RDSやWindowsサーバーだとまた違ってくるのかもしれません。
ですが、もし私と同じような状態で困っている人はこの方法を試してみてください。

以下、公式ドキュメント

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