如何下载通过 CloudFormation 创建的 IoT 证书?

How do I download my IoT certificate created via CloudFormation?

我正在使用 AWS CloudFormation 创建物联网 ThingPolicyCertificate。我的堆栈创建成功,但是,我无法访问 CloudFormation 创建的证书文件。

查看 aws 文档 here 您可以通过 CloudFormation 从证书获得的唯一输出是 ARNCertificate ID。但是,无法使用我看到的 ARNCertificate ID 检索您的证书。

如果您通过 AWS IoT 控制台上传您的证书签名请求 (CSR),它会显示一个下载 link,您可以获取您的证书文件。

不幸的是,我需要使用 CloudFormation 来创建物联网 Certificate。但是看起来您可以在创建证书后下载证书。具体来说:

Certificates can be retrieved at any time

我一直在搜索文档和 Web 界面以弄清楚如何下载我的证书,但没有成功 "at any time"。我对证书和私钥的整个世界还比较陌生,所以希望我错过了一些简单的东西。

有谁知道是否可以从 CloudFormation 创建的 IoT Certificate 获取证书?

啊,我找到了使用 AWS CLI 的方法。但确实需要一种通过 CloudFormation 获取它的方法:(

http://docs.aws.amazon.com/cli/latest/reference/iot/describe-certificate.html

可以通过以下方式检索使用 CloudFormation(通过 CSR)创建的证书

Aws 物联网网页

只需导航到安全 - 证书,单击 ... 和 select 下载。

AWS CLI

正如您提到的 CLI 也是一个选项

aws iot describe-certificate --certificate-id fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd3

会return

{
    "certificateDescription": {
        "certificateArn": "arn:aws:iot:eu-central-1:xxxxxx", 
        "status": "ACTIVE", 
        "certificateId": "fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd3", 
        "lastModifiedDate": 1519840881.49, 
        "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDsTCCApmg.....VsAzFQ==\n-----END CERTIFICATE-----\n", 
        "transferData": {}, 
        "ownedBy": "123456789", 
        "creationDate": 1519840820.888
    }

亚马逊物联网 SDK

也可用于根据证书 ID(您可以通过 cloudformation 输出)将证书内容(PEM 格式)检索为字符串

import com.amazonaws.services.iot.AWSIot;
import com.amazonaws.services.iot.AWSIotClientBuilder;
import com.amazonaws.services.iot.model.DescribeCertificateRequest;
import com.amazonaws.services.iot.model.DescribeCertificateResult;

DescribeCertificateRequest describeCertificateRequest = new DescribeCertificateRequest();
describeCertificateRequest.setCertificateId("fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd3");
DescribeCertificateResult describeCertificateResult = awsIot.describeCertificate(describeCertificateRequest);
describeCertificateResult.getCertificateDescription().getCertificatePem();

据我所知,无法将其输出为 cloudformation 模板中的变量。