我正在使用 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
中获取您的证书?
可以通过以下方式检索使用 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 模板中的变量。
啊,我找到了使用 AWS CLI 的方法。但确实需要一种通过 CloudFormation 获取它的方法:(
http://docs.aws.amazon.com/cli/latest/reference/iot/describe-certificate.html
如果有人试图在 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() });