クライアント証明でAPIgatewayへのアクセス制御を行う方法
APIGatewayにクライアント証明書を設定し、mTLS認証を導入することになったため手順を残しておく
※windows11での手順となります。
注意:前提として、独自ドメインを取得しておいてください。これがないと出来ないはずです。
必要手順は以下の通り
- 証明書の発行
- 1で発行した証明書をACMに登録
証明書の発行手順について
GitBashなどをインストールして作業を行ってください。
※任意のフォルダ(証明書発行用フォルダ)などを作って行ってください。
※ドメインはテスト用にapi.example.comとしています。取得したドメインに変更してください。
CA(認証局)を作成
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt \
-subj "//C=JP/ST=Tokyo/L=Chiyoda/O=MyOrg/OU=CA/CN=MyRootCA"
クライアント証明書を作成
# 秘密鍵
openssl genrsa -out client.key 2048
# CSR(署名要求)
openssl req -new -key client.key -out client.csr \
-subj "//C=JP/ST=Tokyo/L=Chiyoda/O=ClientOrg/CN=myclient"
# CAで署名(client.crt が生成される)
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-out client.crt -days 365 -sha256
サーバー証明書を作成(ACM用)
# 秘密鍵
openssl genrsa -out server.key 2048
# CSR(署名要求)
openssl req -new -key server.key -out server.csr \
-subj "//C=JP/ST=Tokyo/L=Chiyoda/O=ServerOrg/CN=api.example.com"
# CAで署名(server.crt が生成される)
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-out server.crt -days 365 -sha256
作成されるファイル一覧
ca.key ← 認証局の秘密鍵
ca.crt ← 認証局の証明書(API Gateway にアップロード)
client.key ← クライアント秘密鍵(curl等に使う)
client.crt ← クライアント証明書
server.key ← サーバー秘密鍵(ACM用)
server.crt ← サーバー証明書(ACM用)
他のあるけど、使わないため割愛
発行した証明書をACMに登録する
以下画面に各内容を転記して、登録する
証明書:server.crt の中身
プライベートキー:server.key の中身
証明書チェーン:ca.crt の中身
S3バケットに認証局の証明書を格納する
カスタムドメインの追加
発行した証明書でAPIgatewayにカスタムドメインを追加する

相互TLS認証をオンにし、ACM証明書の先ほど登録した証明書をセットする

相互認証をオンにするとこんな感じで、URIを求められるため入力する
URIはS3バケットに記載されています

API マッピングを追加
作成したカスタムドメイン名をクリック
「API マッピングを追加」ボタンを押す
マッピングの設定
API:該当のREST APIを選択
ステージ:例 prod
パスプレフィックス:空白のままでもOK
「保存」を押下

