すべてのプロダクト
Search
ドキュメントセンター

Key Management Service:アプリケーションのデプロイ時に専用KMSを使用する

最終更新日:Jan 03, 2025

Elastic Compute Service (ECS) インスタンスまたはContainer Service for Kubernetes (ACK) クラスターにアプリケーションをデプロイする場合は、アプリケーションのデプロイ中に専用キー管理サービス (KMS) を使用してデータを暗号化できます。 このトピックでは、イメージを使用してアプリケーションをデプロイするときに、専用KMSを使用してデータを暗号化する方法について説明します。

ECSインスタンスへのアプリケーションのデプロイ

この例では、Linuxオペレーティングシステムが使用され、Javaアプリケーションがデプロイされています。

前提条件

専用KMSインスタンスが購入されました。 専用KMSインスタンス用にアプリケーションアクセスポイント (AAP) が作成されます。 クライアント鍵ファイルがダウンロードされ、保存される。 専用KMSインスタンスの認証局 (CA) 証明書が取得されます。 詳細については、「

アプリケーションをStandardエディションの専用KMSインスタンスに接続します」をご参照ください。

説明

デフォルトでは、ダウンロードされたクライアントキーファイルの名前はClientKey_******.json形式です。

手順

  1. カスタムイメージを作成するECSインスタンスを購入します。 詳細については、「Linuxインスタンスの使用を開始する」をご参照ください。

  2. ECSインスタンスに専用KMSインスタンスのCA証明書をインストールします。

    説明

    Java以外のアプリケーションをデプロイする場合は、CA証明書をインストールする必要はありません。 CA証明書は、アプリケーションの指定された構成ディレクトリにのみ保存する必要があります。

    1. CA証明書を2つのファイルに分割します。

      CA証明書は2つのファイルで構成され、各ファイルは ----- BEGIN certificate ------- で始まり、----- END CERTIFICATE ------- で終わります。 最初のファイルはrootca.pemで、2番目のファイルはsubca.pemです。

      • ファイル1: rootca.pem

        -----BEGIN CERTIFICATE-----
        <Root CA Certificate BASE64 Content>
        -----END CERTIFICATE-----
      • ファイル2: subca.pem

        -----BEGIN CERTIFICATE-----
        <Sub CA Certificate BASE64 Content>
        -----END CERTIFICATE-----
    2. 次のコードを実行してOpenJDKをインストールします。

      この例では、java-1.8.0-openjdkがインストールされています。 ビジネス要件に基づいて、異なるバージョンのOpenJDKを選択できます。

      yum install java-1.8.0-openjdk -y
    3. 2つのファイルを$JAVA_HOME/jre/lib/security/cacertskeytoolコマンドを使用して

      • ファイルのインポート1 rootca.pem

        keytool -importcert -alias PrivateKmsCA_RootCA -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -file rootca.pem
      • ファイル2 subca.pemのインポート

        keytool -importcert -alias PrivateKmsCA_SubCA -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -file subca.pem
    4. 次のコードを実行して、CA証明書がインストールされているかどうかを確認します。

      URL serviceUrl = new URL("https://<service_id>.cryptoservice.kms.aliyuncs.com");
      serviceUrl.openConnection().connect();
      説明

      f javax.net.ssl.SSLHandshakeExceptionが報告されていない場合、CA証明書がインストールされています。

  3. アプリケーションの指定された構成ディレクトリにクライアントキーファイルをアップロードし、アプリケーションの環境変数にクライアントキーファイルのパスワードを設定します。 環境変数を設定するために使用される方法は、オペレーティングシステムによって異なります。 詳細については、「Linux、macOS、およびWindowsでの環境変数の設定」をご参照ください。

  4. カスタムイメージを作成します。 詳細については、「インスタンスからのカスタムイメージの作成」をご参照ください。

    [インスタンス] にCA証明書がインストールされているECSインスタンスを選択する必要があります。 カスタムイメージを作成したら、[イメージ] ページでカスタムイメージを表示できます。

ACKクラスターにアプリケーションをデプロイする

この例では、CentOS 7.1オペレーティングシステムが使用され、Javaアプリケーションがデプロイされています。

前提条件

手順

  1. 作成するDockerイメージの作業ディレクトリにCA証明書を保存します。

    説明

    Java以外のアプリケーションをデプロイする場合は、CA証明書を分割する必要はありません。 CA証明書は、アプリケーションの指定された構成ディレクトリにのみ保存する必要があります。

    1. CA証明書を2つのファイルに分割します。

      CA証明書は2つのファイルで構成され、各ファイルは ----- BEGIN certificate ------- で始まり、----- END CERTIFICATE ------- で終わります。 最初のファイルはrootca.pemで、2番目のファイルはsubca.pemです。

      • ファイル1: rootca.pem

        -----BEGIN CERTIFICATE-----
        <Root CA Certificate BASE64 Content>
        -----END CERTIFICATE-----
      • ファイル2: subca.pem

        -----BEGIN CERTIFICATE-----
        <Sub CA Certificate BASE64 Content>
        -----END CERTIFICATE-----
    2. Dockerイメージの作業ディレクトリを作成し、作業ディレクトリにcacertsサブディレクトリを作成します。

    3. cacertsサブディレクトリにrootca.pemファイルとsubca.pemファイルを保存します。

  2. Dockerイメージの作業ディレクトリにDockerfileという名前のファイルを作成し、次の内容をファイルに追加します。

    ## Replace {regionId} with the ID of the region where the dedicated KMS instance resides. 
    FROM alibaba-cloud-linux-3-registry.{regionId}.cr.aliyuncs.com/alinux3/alinux3
    
    ## If you want to deploy a non-Java application, copy the extracted files of the CA certificate to the specified directory.
    COPY ./cacerts/rootca.pem /etc/dkms/certs/
    COPY ./cacerts/subca.pem /etc/dkms/certs/
    
    ## Copy the client key file to the specified directory.
    COPY ./cacerts/ClientKey_xxxxxxxxxxx.json /etc/dkms/certs/
    
    RUN dnf -y update && \
            dnf install findutils -y && \
            dnf clean all && \
            yum install java-1.8.0-openjdk -y && \
            yum clean all
    
    RUN export JRE_HOME=$(find "/usr/lib/jvm" -type d -name "jre") && \
        keytool -importcert -alias PrivateKmsCA_RootCA -keystore $JRE_HOME/lib/security/cacerts -storepass changeit -file /etc/dkms/certs/rootca.pem -noprompt && \
        keytool -importcert -alias PrivateKmsCA_SubCA -keystore $JRE_HOME/lib/security/cacerts -storepass changeit -file /etc/dkms/certs/subca.pem -noprompt && \
        rm -f /etc/dkms/certs/rootca.pem &&\
        rm -f /etc/dkms/certs/subca.pem
  3. 次のコードを実行してDockerイメージを作成します。

    イメージは、アプリケーションの依存ベースイメージとして使用できます。

    docker build -t dkmsca:v1 .
  4. Container Registryコンソールで、名前空間とイメージリポジトリを作成します。 詳細については、「Container Registry Enterprise Editionインスタンスを使用したイメージの作成」をご参照ください。

  5. 次のコードを実行して、作成したイメージリポジトリにDockerイメージをプッシュします。

    次のコードでは、名前空間はdkms、イメージリポジトリはdkmscaです。 ビジネス要件に基づいてコードを変更できます。

    docker login --username=xxxxxxx {instanceId}-registry.{regionId}.cr.aliyuncs.com
    docker tag  dkmsca:v1 {instanceId}-registry.{regionId}.cr.aliyuncs.com/dkms/dkmsca:v1
    docker push {instanceId}-registry.{regionId}.cr.aliyuncs.com/dkms/dkmsca:v1
  6. Secretを使用して、クライアント鍵ファイルのパスワードをACKクラスターに保存します。 アプリケーションは、シークレットを環境変数またはデータボリュームとして使用します。 詳細については、「シークレットを使用するポッドの設定」をご参照ください。

    環境変数を設定するために使用される方法は、オペレーティングシステムによって異なります。 詳細については、「Linux、macOS、およびWindowsでの環境変数の設定」をご参照ください。