如何下载通过 CloudFormation 创建的物联网证书?

问题描述 投票:0回答:3

我正在使用 AWS CloudFormation 创建 IoT

Thing
Policy
Certificate
。我的堆栈创建成功,但是,我无法访问 CloudFormation 创建的证书文件。

查看aws文档here您可以通过CloudFormation从证书获得的唯一输出是

ARN
Certificate ID
。但是,无法使用我看到的
ARN
Certificate ID
来检索您的证书。

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

不幸的是,我需要使用 CloudFormation 来创建 IoT

Certificate
。但是看起来您可以在创建证书后下载它。具体来说:

证件随时取回

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

有谁知道是否可以从 CloudFormation 创建的 IoT

Certificate
中获取您的证书?

amazon-web-services certificate aws-cloudformation aws-iot
3个回答
3
投票

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

Aws 物联网网页

只需导航到安全 - 证书,单击

...
并选择下载。

AWS CLI

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

aws iot describe-certificate --certificate-id fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd371fcd3

会回来

{
    "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();

AFAIK 不可能将它输出为 cloudformation 模板中的变量。


1
投票

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

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


0
投票

如果有人试图在 CDK 中这样做,这对我有用:

    const iotCertificate = new iot.CfnCertificate(this, "iot-certificate", {
      status: "ACTIVE",
      certificateSigningRequest: fs.readFileSync(path.resolve("./credentials/cert.req"), "utf8"),
    });

    const describeIotCertificate = new cr.AwsCustomResource(this, 'describe-iot-certificate', {
      onCreate: {
        service: 'Iot',
        action: 'describeCertificate',
        parameters: {
          certificateId: `${iotCertificate.attrId}`
        },
        physicalResourceId: cr.PhysicalResourceId.of(Date.now().toString()),
      },
      policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
        resources: cr.AwsCustomResourcePolicy.ANY_RESOURCE,
      }),
    });
    describeIotCertificate.node.addDependency(iotCertificate);

    const iotCertificatePem = describeIotCertificate.getResponseField('certificateDescription.certificatePem')
    new cdk.CfnOutput(this, 'IoT certificate PEM', { value: iotCertificatePem.toString() });
© www.soinside.com 2019 - 2024. All rights reserved.