如果您的应用是云部署在服务器ECS或者容器服务ACK上,并使用专属KMS进行数据加密,您可以通过本文了解如何以镜像方式弹性部署应用的过程中使用专属KMS。

通过ECS部署应用使用专属KMS

本文以Linux操作系统、部署Java应用为例。

前提条件

您已经启用专属KMS实例,为实例创建应用接入点,并保存了应用身份凭证文件、已获取实例CA证书。具体操作,请参见专属KMS基础版快速入门专属KMS标准版快速入门
说明 应用身份凭证文件下载后,文件名默认为ClientKey_******.json。

操作步骤

  1. 购买一个ECS实例,用于创建自定义镜像。具体操作,请参见Linux系统实例快速入门
  2. 在ECS实例上安装专属KMS的CA证书。
    说明 如果您部署应用使用的非Java语言,则无需安装CA证书,只需将CA证书保存到应用指定配置目录。
    1. 将CA证书文件拆分为2个证书文件。

      CA证书文件内容有两部分,均以 ------BEGIN CERTIFICATE --------开头,以------END CERTIFICATE -------- 结尾。第一部分为rootca.pem的内容,第二部分为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. 执行如下代码安装Java OpenJDK。
      以安装java-1.8.0-openjdk为例,您可以根据实际情况选择版本安装。
      yum install java-1.8.0-openjdk -y
    3. 使用Keytool工具将拆分后的CA证书导入至$JAVA_HOME/jre/lib/security/cacerts
      • 导入文件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();
      说明 如果没有出现javax.net.ssl.SSLHandshakeException的异常提示,则表示CA证书安装成功。
  3. 将应用身份凭证文件上传到应用指定配置目录,并将应用接入点的凭证口令配置到运行该应用程序的用户的环境变量中。
  4. 制作自定义镜像。具体操作,请参见在镜像页面创建自定义镜像
    配置信息时实例选择已成功安装CA证书的ECS实例。配置成功后,您可以在镜像页面查看到已创建的自定义镜像。

通过ACK部署应用使用专属KMS

本文以CentOS 7.1操作系统,部署Java应用为例。

前提条件

操作步骤

  1. 将证书文件保存在Docker镜像的工作目录中。
    说明 如果您部署应用使用的非Java语言,则无需拆分CA证书,只需将CA证书保存到应用指定配置目录即可。
    1. 将CA证书文件拆分为2个证书文件。

      CA证书文件内容有两部分,均以 ------BEGIN CERTIFICATE --------开头,以------END CERTIFICATE -------- 结尾。第一部分为rootca.pem的内容,第二部分为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. 将证书文件rootca.pem和subca.pem,保存在cacerts子目录下。
  2. 在Docker镜像的工作目录下新建Dockerfile文件,并在Dockerfile文件添加以下内容。
    ## {regionId}需要替换为您实际地域的ID。
    FROM alibaba-cloud-linux-3-registry.{regionId}.cr.aliyuncs.com/alinux3/alinux3
    
    ## 其他语言将ca证书COPY到指定目录即可
    COPY ./cacerts/rootca.pem /etc/dkms/certs/
    COPY ./cacerts/subca.pem /etc/dkms/certs/
    
    ## 将应用身份凭证文件COPY到指定目录
    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. 在容器镜像服务控制台创建命名空间及镜像仓库。具体操作,请参见使用企业版实例构建镜像
  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. 将应用接入点的凭证口令通过保密字典配置到您的ACK集群中,您的应用程序通过环境变量或者数据卷加载该保密字典。具体操作,请参见在容器组中使用保密字典