4
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?

【AWS】SecretsManagerに登録したSSL証明書をElasticBeanstalkで取得してアプリケーションの任意のパスに配置する

4
Last updated at Posted at 2026-01-29

どうもこんにちは。
今回は、ElasticBeanstalkで運用しているRailsアプリケーションから、SecretsManagerに配置しているSSL証明書をダウンロードしてconfigディレクトリに配置する方法を紹介します。

前提条件

  1. ローカル環境で証明書の検証が完了していること
  2. ローカル環境の任意のディレクトリにsample_client.crtsample_client.keyの2つの証明書が配置されていること
    • 今回の記事では、./config/certディレクトリに配置しているものとして説明しています
  3. ElasticBeanstalk環境の環境変数にSAMPLE_API_CERT_SECRET: <SecretsManagerの名前>を設定しておくこと
  4. ElasticBeanstalk環境からSecretsManagerの値を読み取るIAMポリシーを作成してアタッチしていること
  5. AWS CLIを使用可能な状態であること
  6. EBコマンドを使用可能な状態であること
  • 環境変数の設定例
SAMPLE_API_CERT_SECRET: sample-certificates
  • IAMポリシーの例
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": [
        "arn:aws:secretsmanager:ap-northeast-1:YOUR_ACCOUNT_ID:secret:sample-certificates"
      ]
    }
  ]
}

手順

1. SecretsManagerに配置する

1-1. 証明書を変換する

ターミナルで以下を実行します。

ターミナル
% CERT_BASE64=$(base64 -i config/certs/sample_api_client.crt)
% KEY_BASE64=$(base64 -i config/certs/sample_api_client.key)

1-2. JSONファイルを作成

ターミナルで以下を実行します。

ターミナル
% cat > sample-api-certs.json <<EOF
{
  "CLIENT_CERT": "$CERT_BASE64",
  "CLIENT_KEY": "$KEY_BASE64"
}
EOF

1-3. AWS CLIでSecretsManagerを作成

ターミナルで以下を実行します。

ターミナル
% aws secretsmanager create-secret \
  --name sample-certificates \
  --description "Sample API client certificates" \
  --secret-string file://sample-api-certs.json \
  --region ap-northeast-1

AWSマネジメントコンソール上で作成していただいても構いません。ただし、証明書の内容を変換したものをValueに設定するようにしてください。
また、Keyは大文字にしてください。(小文字でも良いですが、以降の記事では大文字を前提としています。)

1-4. (セキュリティ対策)

以下は削除しておきましょう。

ターミナル
% rm sample-api-certs.json

2. ebextensions作成

2-1. .ebextensions ディレクトリにファイルを作成

.ebextensionsディレクトリが存在しない場合には、以下のコマンドで作成しておいてください。

ターミナル
% mkdir -p .ebextensions

ディレクトリが存在することを確認したら、以下のコマンドでファイルを作成します。

ターミナル
% touch 01_sample_api_client_certificate.config       # Windowsの方は`ni`コマンド?

2-2. スクリプトコードを記述

# Sample API クライアント証明書の配置設定
# AWS Secrets Manager から証明書を取得し、config/certs/ に配置します

packages:
  yum:
    jq: []

container_commands:
  # 保存先ディレクトリ
  01_create_certs_directory:
    command: "mkdir -p config/certs"

  # SecretsManagerから`CLIENT_CERT`のValueを取得して、`config/certs/sample_api_client.crt`に配置
  02_fetch_client_cert:
    # `$SAMPLE_API_CERT_SECRET` でElasticBeanstalkに設定されている環境変数の値を読み取る
    command: "aws secretsmanager get-secret-value --secret-id $SAMPLE_API_CERT_SECRET --region ap-northeast-1 --query SecretString --output text | jq -r '.CLIENT_CERT' | base64 -d > config/certs/sample_api_client.crt"

  # SecretsManagerから`CLIENT_KEY`のValueを取得して、`config/certs/sample_api_client.key`に配置
  03_fetch_client_key:
    command: "aws secretsmanager get-secret-value --secret-id $SAMPLE_API_CERT_SECRET --region ap-northeast-1 --query SecretString --output text | jq -r '.CLIENT_KEY' | base64 -d > config/certs/sample_api_client.key"

  # それぞれの証明書ファイルに対する権限を付与
  04_set_permissions:
    command: |
      chmod 644 config/certs/sample_api_client.crt
      chmod 600 config/certs/sample_api_client.key
      chown webapp:webapp config/certs/sample_api_client.*

3. コミットしてデプロイ

ターミナルで以下を実行します。

ターミナル
% git add .ebextensions/01_sample_api_client_certificate.config
% git commit -m "<コミットメッセージ>"
(pushはお任せします)

% eb use <ElasticBeanstalk 環境名>
% eb list     # デプロイ先の環境名に`*`がついていることを確認
% eb status   # デプロイ先の環境のステータスなどの情報が取得されていることを確認
% eb deploy   # デプロイ実行

4. 確認

SSH接続してデプロイしたアプリケーションに入って確認します。(SSH接続じゃなくても良いです。)

ターミナル
% eb ssh

# 以下、SSH接続
$ cd /var/app/current/config    # /var/app/current がアプリケーションのルートディレクトリです。
$ ls                            #=> `sample_api_client.crt`と`sample_api_client.key`が存在していることを確認

sample_api_client.crtsample_api_client.keyが存在していることを確認できればOKです。

まとめ

SSL証明書は、セキュリティ的にも.gitignoreに含めるものですので、このようにしてデプロイ先環境で証明書を使用するのが良いと思います。他にも方法はありそうですが、これが一番シンプルな気がしています。

以上

4
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
4
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?