{ "info": { "author": "Daniel Flook", "author_email": "daniel@flook.org", "bugtrack_url": null, "classifiers": [], "description": "# Cloudformation DNS Validated Certificate Resource\n\nThe cloudformation AWS::CertificateManager::Certificate resource can only create email validated certificates.\n\nThis is a cloudformation custom resource which can additionally create DNS validated certificates for domains that use\na Route 53 hosted zone. It can also create certificates in a region other than the stack's region.\n\n## Usage\n\nTo use this custom resource, copy the CustomAcmCertificateLambda and CustomAcmCertificateLambdaExecutionRole resources\ninto your template. You can then create certificate resources of Type: `Custom::DNSCertificate`.\n\nThis resource is also available as troposphere extension, in the [troposphere-dns-certificate](https://pypi.org/project/troposphere-dns-certificate/) package\n\nRemember to add a ServiceToken property to the resource which references the CustomAcmCertificateLambda arn.\nCertificates may take up to 30 minutes to be issued, but typically takes ~3 minutes. The Certificate resource remains as \nCREATE_IN_PROGRESS until the certificate is issued.\n\n### Differences from AWS::CertificateManager::Certificate\nIt should behave similarly to [AWS::CertificateManager::Certificate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html), \nexcept for the differences described here.\n\nWhen using 'DNS' as the `ValidationMethod` the `DomainValidation` property becomes required, and the `DomainValidationOption`\nrequires a `HostedZoneId` instead of a `ValidationDomain`. The `HostedZoneId` should be the zone to create the DNS validation \nrecords in. You can also specify a `Route53RoleArn`, which is a role to assume before creating DNS validation records.\n\nThe additional `Region` property can be used to set the region to create the certificate in.\n\n### Certificate Resource\n\n#### Syntax\n\n```yaml\nType: Custom::DNSCertificate\nProperties: \n DomainName: String\n DomainValidationOptions:\n - DomainValidationOption\n SubjectAlternativeNames:\n - String\n Tags:\n - Resource Tag\n ValidationMethod: String\n Region: String\n ServiceToken: !GetAtt 'CustomAcmCertificateLambda.Arn' \n```\n\n#### Properties\n\n* `DomainName`\n\n Fully qualified domain name (FQDN) to issue the certificate for. Use an asterisk as a wildcard.\n\n - Required: Yes\n - Type: String\n - Update requires: [Replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)\n\n* `DomainValidationOptions`\n\n Information for validating domain ownership. A DomainValidationOption should be present for the DomainName and all \n SubjectAlternativeNames. A DomainValidationOption for a parent domain can be used for names that have the same HostedZoneId.\n\n - Required: Yes\n - Type: List of `DomainValidationOption`\n - Update requires: [Replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement) \n\n* `SubjectAlternativeNames`\n\n FQDNs to include in the Subject Alternative Name of the certificate.\n\n - Required: No\n - Type: List of String values\n - Update requires: [Replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement) \n\n* `Tags`\n\n Tags for this certificate\n\n - Required: No\n - Type: [Resource Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html)\n - Update requires: [No interruption](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-no-interrupt) \n\n* `ValidationMethod`\n\n Method to use to validate domain ownership. This should be `DNS`.\n\n - Required: No\n - Default: `EMAIL`\n - Type: String\n - Update requires: [Replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement) \n\n* `Region`\n\n The region to create the certificate in.\n\n - Required: No\n - Default: The Stack's region\n - Type: String\n - Update requires: [Replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement) \n\n#### Return value\n\n* Ref\n\n When the [`Ref`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) \n function is used on the logical ID of a Certificate resource the certificate ARN is returned.\n\n### DomainValidationOption\n\n#### Syntax\n\n```yaml\nDomainName: String\nHostedZoneId: String\nRoute53RoleArn: String\n```\n\n#### Properties\n\n* `DomainName`\n\n Fully qualified domain name of the validation request.\n\n - Required: Yes\n - Type: String\n\n* `HostedZoneId`\n\n The Route53 Hosted Zone to create validation records in.\n\n - Required: Yes\n - Type: String\n\n* `Route53RoleArn`\n\n The arn of an IAM Role to assume when creating DNS validation records. This can be used to create the records for a\n Hosted Zone in another AWS account.\n\n - Required: No\n - Type: String\n\n## Troposphere\n\nIf you are using troposphere you can install this resource as an extension using pip:\n\n $ pip install troposphere_dns_certificate\n\nYou can then import the Certificate resource from troposphere_dns_certificate.certificatemanager instead of troposphere.certificatemanager. \n\ncloudformation.py is an example of using troposphere to create a template with a Certificate resource. \n\nIf you are not using troposphere, you can simply copy the CustomAcmCertificateLambda and CustomAcmCertificateLambdaExecutionRole\nresources from the cloudformation.json or cloudformation.yaml files.\n\n## Examples\n\nThe certificate resource looks like:\n\n```yaml\nExampleCertificate:\n Properties:\n DomainName: test.example.com\n ValidationMethod: DNS\n DomainValidationOptions:\n - DomainName: test.example.com\n HostedZoneId: Z2KZ5YTUFZNC7H\n Tags:\n - Key: Name\n Value: Example Certificate\n ServiceToken: !GetAtt 'CustomAcmCertificateLambda.Arn'\n Type: Custom::DNSCertificate\n```\n\n\nAs with AWS::CertificateManager::Certificate providing the logical ID of the resource to the Ref function returns the certificate ARN.\n\nFor example (in yaml): `!Ref 'ExampleCertificate'`\n\n### SubjectAlternativeNames\n\nAdditional names can be added to the certificate using the SubjectAlternativeNames property.\n\n```yaml\nExampleCertificate:\n Properties:\n DomainName: example.com\n SubjectAlternativeNames:\n - additional.example.com\n - another.example.com\n ValidationMethod: DNS\n DomainValidationOptions:\n - DomainName: example.com\n HostedZoneId: Z2KZ5YTUFZNC7H\n Tags:\n - Key: Name\n Value: Example Certificate\n ServiceToken: !GetAtt 'CustomAcmCertificateLambda.Arn'\nType: Custom::DNSCertificate\n```\n\n### Multiple Hosted Zones\n\nNames from multiple hosted zones can be used by adding DomainValidationOptions for each of the hosted zones.\nFor example:\n\n```yaml\nExampleCertificate:\n Properties:\n DomainName: example.com\n SubjectAlternativeNames:\n - additional.example.org\n ValidationMethod: DNS\n DomainValidationOptions:\n - DomainName: example.com\n HostedZoneId: Z2KZ5YTUFZNC7H\n - DomainName: example.org\n HostedZoneId: ZEJZ9DIN47IQN\n Tags:\n - Key: Name\n Value: Example Certificate\n ServiceToken: !GetAtt 'CustomAcmCertificateLambda.Arn'\nType: Custom::DNSCertificate\n```\n\n### Wildcards\n\nWildcards can be used normally. A certificate for a name and all subdomains for example:\n\n```yaml\nExampleCertificate:\n Properties:\n DomainName: example.com\n SubjectAlternativeNames:\n - *.example.com\n ValidationMethod: DNS\n DomainValidationOptions:\n - DomainName: example.com\n HostedZoneId: Z2KZ5YTUFZNC7H\n Tags:\n - Key: Name\n Value: Example Certificate\n ServiceToken: !GetAtt 'CustomAcmCertificateLambda.Arn'\n Type: Custom::DNSCertificate\n```\n\n### Specifying a region\n\nThis example uses the Region property to create the certificate in us-east-1, for use with cloudfront:\n\n```yaml\nExampleCertificate:\n Properties:\n DomainName: example.com\n ValidationMethod: DNS\n DomainValidationOptions:\n - DomainName: example.com\n HostedZoneId: Z2KZ5YTUFZNC7H\n Region: us-east-1\n Tags:\n - Key: Name\n Value: Example Certificate\n ServiceToken: !GetAtt 'CustomAcmCertificateLambda.Arn'\n Type: Custom::DNSCertificate\n```\n\n### Assuming a role for Route 53 record creation\n\nIn some cases the account owning the hosted zone might be a different one than the one you are generating the certificate in.\nTo support this you can specify the domain validation option property `Route53RoleArn` with a role-ARN that should be \nassumed before creating the records required for certificate validation.\n\nIf a top-level Route53RoleArn property is specified it will be assumed when validating domains that don't contain a\nRoute53RoleArn domain validation option property.\n\n```yaml\nExampleCertificate:\n Properties:\n DomainName: test.example.com\n ValidationMethod: DNS\n DomainValidationOptions:\n - DomainName: test.example.com\n HostedZoneId: Z2KZ5YTUFZNC7H\n Route53RoleArn: arn:aws:iam::TRUSTING-ACCOUNT-ID:role/ACMRecordCreationRole\n Tags:\n - Key: Name\n Value: Example Certificate\n ServiceToken: !GetAtt 'CustomAcmCertificateLambda.Arn'\n Type: Custom::DNSCertificate\n```\n\nAdditionally you have to allow the assumption of this role by adding this statement to the CustomAcmCertificateLambdaExecutionRole:\n\n```yaml\n- Action:\n - sts:AssumeRole\n Resource:\n - arn:aws:iam::TRUSTING-ACCOUNT-ID:role/ACMRecordCreationRole\n Effect: Allow\n```\n\nIf you are using the troposphere extension, this statement is added automatically. The full CustomAcmCertificateLambdaExecutionRole\nfor this example would look like:\n\n```yaml\nCustomAcmCertificateLambdaExecutionRole:\n Properties:\n AssumeRolePolicyDocument:\n Statement:\n - Action:\n - sts:AssumeRole\n Effect: Allow\n Principal:\n Service: lambda.amazonaws.com\n Version: '2012-10-17'\n ManagedPolicyArns:\n - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole\n - arn:aws:iam::aws:policy/service-role/AWSLambdaRole\n Policies:\n - PolicyDocument:\n Statement:\n - Action:\n - acm:AddTagsToCertificate\n - acm:DeleteCertificate\n - acm:DescribeCertificate\n - acm:RemoveTagsFromCertificate\n Effect: Allow\n Resource:\n - !Sub 'arn:aws:acm:*:${AWS::AccountId}:certificate/*'\n - Action:\n - acm:RequestCertificate\n - acm:ListTagsForCertificate\n - acm:ListCertificates\n Effect: Allow\n Resource:\n - '*'\n - Action:\n - route53:ChangeResourceRecordSets\n Effect: Allow\n Resource:\n - arn:aws:route53:::hostedzone/*\n - Action:\n - sts:AssumeRole\n Effect: Allow\n Resource:\n - arn:aws:iam::TRUSTING-ACCOUNT-ID:role/ACMRecordCreationRole\n Version: '2012-10-17'\n PolicyName: !Sub '${AWS::StackName}CustomAcmCertificateLambdaExecutionPolicy'\n```\n\nThe IAM role in the account with the hosted zone would look something like:\n\n```yaml\nACMRecordCreationRole:\n Type: AWS::IAM::Role\n Properties:\n AssumeRolePolicyDocument:\n Statement:\n - Action:\n - sts:AssumeRole\n Principal:\n AWS:\n - arn:aws:iam::TRUSTED-ACCOUNT-ID:root\n Effect: Allow\n Version: '2012-10-17'\n Policies:\n - PolicyName: 'ACMRecordCreation'\n PolicyDocument:\n Version: '2012-10-17'\n Statement:\n - Action:\n - route53:ChangeResourceRecordSets\n Resource:\n - arn:aws:route53:::hostedzone/Z2KZ5YTUFZNC7H\n Effect: Allow\n RoleName: ACMRecordCreationRole\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/dflook/cloudformation-dns-certificate", "keywords": "cloudformation troposphere certificate", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "troposphere-dns-certificate", "package_url": "https://pypi.org/project/troposphere-dns-certificate/", "platform": "", "project_url": "https://pypi.org/project/troposphere-dns-certificate/", "project_urls": { "Homepage": "https://github.com/dflook/cloudformation-dns-certificate", "Issues": "https://github.com/dflook/cloudformation-dns-certificate/issues", "Say Thanks!": "https://saythanks.io/to/dflook" }, "release_url": "https://pypi.org/project/troposphere-dns-certificate/1.7.1/", "requires_dist": [ "troposphere", "awacs", "wrapt", "python-minifier (>=2.1.0)", "boto3" ], "requires_python": "", "summary": "Cloudformation DNS validated certificate resource for troposphere", "version": "1.7.1" }, "last_serial": 5641084, "releases": { "1.2.1": [ { "comment_text": "", "digests": { "md5": "53b9e13b9f2431797375bd06d78a1d6b", "sha256": "1b05796c46595682cd4bc43d84e60c1c88706752fd93f4ad8024e72e976e6383" }, "downloads": -1, "filename": "troposphere_dns_certificate-1.2.1-py3-none-any.whl", "has_sig": true, "md5_digest": "53b9e13b9f2431797375bd06d78a1d6b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7688, "upload_time": "2018-11-07T23:54:24", "url": "https://files.pythonhosted.org/packages/e3/4b/2cac22c1ba0780ec1931687f4a4a505bdc71d9832d5217eebfe9a32fe4f7/troposphere_dns_certificate-1.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f27d6b2d89eb699e0f721dcdba26a91b", "sha256": "dff4ff94810fd2431389d5d8b983d196a2c6e4291c2d3d919ad9aa58ec976110" }, "downloads": -1, "filename": "troposphere-dns-certificate-1.2.1.tar.gz", "has_sig": true, "md5_digest": "f27d6b2d89eb699e0f721dcdba26a91b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5956, "upload_time": "2018-11-07T23:54:26", "url": "https://files.pythonhosted.org/packages/87/3d/75afdd017985bb17a005e324545260ee0d29535954f6b46da32c73d90eb5/troposphere-dns-certificate-1.2.1.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "98fb624472a9cd9231767b2a1584e2ac", "sha256": "05943da1290b391a1fb5c5374f4b094065785c110444546f1dbf8f7c8a617db0" }, "downloads": -1, "filename": "troposphere_dns_certificate-1.3.0-py3-none-any.whl", "has_sig": true, "md5_digest": "98fb624472a9cd9231767b2a1584e2ac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7763, "upload_time": "2018-11-10T12:12:08", "url": "https://files.pythonhosted.org/packages/90/ce/33fa2974c94422e1c04bf395d90ea3765f9b024393432d55277e9f961435/troposphere_dns_certificate-1.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08a406727cba8fdab48f5e7341bdc689", "sha256": "68c024232ca571881527e88689c4464c646f67a83c7d6b1fce24703b1d6e28a5" }, "downloads": -1, "filename": "troposphere-dns-certificate-1.3.0.tar.gz", "has_sig": true, "md5_digest": "08a406727cba8fdab48f5e7341bdc689", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6046, "upload_time": "2018-11-10T12:12:10", "url": "https://files.pythonhosted.org/packages/ec/50/14a361613885a71298923f2081e524c0c8f9cfd3dabe35de48457ccdda2a/troposphere-dns-certificate-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "aacf0dabdfc2a3d4335af0c25ca9ac6f", "sha256": "5626e2d46d6aeda42ca0ecc5f56f12aeb362c1211e603c8a987cb4f1e935e199" }, "downloads": -1, "filename": "troposphere_dns_certificate-1.4.0-py3-none-any.whl", "has_sig": true, "md5_digest": "aacf0dabdfc2a3d4335af0c25ca9ac6f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8300, "upload_time": "2018-11-30T20:13:31", "url": "https://files.pythonhosted.org/packages/50/0e/936cf1a8da19c1c962a4be688963e923b74ce9e33e99ce4b0f669e2c7a9c/troposphere_dns_certificate-1.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dd1b4b1161ec2f899af4d9e8df0aef32", "sha256": "18b122da89d474c5b8f09eb72887562b413722836f293466a5298a2281f8ebb1" }, "downloads": -1, "filename": "troposphere-dns-certificate-1.4.0.tar.gz", "has_sig": true, "md5_digest": "dd1b4b1161ec2f899af4d9e8df0aef32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7155, "upload_time": "2018-11-30T20:13:32", "url": "https://files.pythonhosted.org/packages/4f/ee/d0b2ba0f2551246d72df36137b775316c63fb16b63a29bd94c95f48377e3/troposphere-dns-certificate-1.4.0.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "cd9ec050b70241abff1e738e0fdf8352", "sha256": "97286236a7c8fe2f4b741341c818427204434e42a5eb4246beaf077d56ee74df" }, "downloads": -1, "filename": "troposphere_dns_certificate-1.5.0-py3-none-any.whl", "has_sig": true, "md5_digest": "cd9ec050b70241abff1e738e0fdf8352", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9807, "upload_time": "2019-01-26T21:05:24", "url": "https://files.pythonhosted.org/packages/b1/7f/c7b8b4eb77cb7b69a64e0aa432032a89bb7b5f6c11fd67bb15f09ef4ac3b/troposphere_dns_certificate-1.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "129e690fe92a4f557321dd136f9645fa", "sha256": "00676aaae8d0883dbe217091c63bfd83d64e0e2d1b957f8fa57b285e4903ad4f" }, "downloads": -1, "filename": "troposphere-dns-certificate-1.5.0.tar.gz", "has_sig": true, "md5_digest": "129e690fe92a4f557321dd136f9645fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9892, "upload_time": "2019-01-26T21:05:28", "url": "https://files.pythonhosted.org/packages/b8/ab/fdb690bb6c7804cabdb108c86573a5a065428d378ff54f86a7d54701bbfc/troposphere-dns-certificate-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "eb49e7aa7da50a6234e32e106e4cce0b", "sha256": "7f00b793e4bb23a863bc04a19810de1489f5d3350afcc33dde0fda806d55fe5d" }, "downloads": -1, "filename": "troposphere_dns_certificate-1.5.1-py3-none-any.whl", "has_sig": true, "md5_digest": "eb49e7aa7da50a6234e32e106e4cce0b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9868, "upload_time": "2019-01-31T20:08:30", "url": "https://files.pythonhosted.org/packages/c3/12/4d0c6284c3470ec52eddd4ee4df24d8483b6b38331b52d8d985a22b1a11d/troposphere_dns_certificate-1.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8d9e87d9af19431a1551b430ca9e78a3", "sha256": "57cf69752f3ecae6464b8136863ec1bc621f49105fc9d1eee372f40f7e282024" }, "downloads": -1, "filename": "troposphere-dns-certificate-1.5.1.tar.gz", "has_sig": true, "md5_digest": "8d9e87d9af19431a1551b430ca9e78a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9997, "upload_time": "2019-01-31T20:08:32", "url": "https://files.pythonhosted.org/packages/6a/8c/8b0a61c6f4f122043bf01aea5c71190cdc774f88bc350ca4f75d56990f07/troposphere-dns-certificate-1.5.1.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "6050b724dec561992ebb158fc3e93401", "sha256": "8ad2797a6b3774d1a6a5f432d0e07c926725e71aca3f5502fae7d83ef01e7b28" }, "downloads": -1, "filename": "troposphere_dns_certificate-1.6.0-py3-none-any.whl", "has_sig": true, "md5_digest": "6050b724dec561992ebb158fc3e93401", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10278, "upload_time": "2019-02-01T22:43:35", "url": "https://files.pythonhosted.org/packages/e2/4f/750800d39f631bfd681e1968da8c360844eb368a0b7d11182c0ce27d8d0b/troposphere_dns_certificate-1.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d97f1c235d436fda3fee9310590209c9", "sha256": "69e695b3162be61322b10da3411ad38239b85013ee61ce54d4fbc3a64770c5a6" }, "downloads": -1, "filename": "troposphere-dns-certificate-1.6.0.tar.gz", "has_sig": true, "md5_digest": "d97f1c235d436fda3fee9310590209c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10422, "upload_time": "2019-02-01T22:43:37", "url": "https://files.pythonhosted.org/packages/aa/21/3d06a830a52733d16454786c321ff7da1483ba80231bc52b6e8a54db597b/troposphere-dns-certificate-1.6.0.tar.gz" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "6c2f0a65046eef03a65aefae1b24282b", "sha256": "7d17fa0f7f7f57b58aa6c533444364939a10fa980d3c757bf0f8c3d4506428ee" }, "downloads": -1, "filename": "troposphere_dns_certificate-1.7.0-py3-none-any.whl", "has_sig": true, "md5_digest": "6c2f0a65046eef03a65aefae1b24282b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10951, "upload_time": "2019-02-16T14:16:36", "url": "https://files.pythonhosted.org/packages/20/3e/f2770c368a023a72c49962b39cc295d369e71cac6e575cc453cb7e16258c/troposphere_dns_certificate-1.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "70cb3e9d8e0e56a5bda488934b03fb8d", "sha256": "afc18511928ce04954b650dbab40815f92dc12d63563d611e70c2fb69526092f" }, "downloads": -1, "filename": "troposphere-dns-certificate-1.7.0.tar.gz", "has_sig": true, "md5_digest": "70cb3e9d8e0e56a5bda488934b03fb8d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12074, "upload_time": "2019-02-16T14:16:38", "url": "https://files.pythonhosted.org/packages/68/cf/e145d6d58f2f607b230a98fa2efc382172ac5ff59ee622018d6d3b4cbec2/troposphere-dns-certificate-1.7.0.tar.gz" } ], "1.7.1": [ { "comment_text": "", "digests": { "md5": "b16866dd501179f4d4b4525de21cd9e1", "sha256": "be6912eacb568a0c56eeac694ab8d259ae764126ecc6b180e0bc379b66002968" }, "downloads": -1, "filename": "troposphere_dns_certificate-1.7.1-py3-none-any.whl", "has_sig": true, "md5_digest": "b16866dd501179f4d4b4525de21cd9e1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10966, "upload_time": "2019-08-06T18:32:12", "url": "https://files.pythonhosted.org/packages/e3/49/30e78369ec89d1e85b9baf98543ed6d94e3000eda63b2f8ba8bb343bd64d/troposphere_dns_certificate-1.7.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7e7eb0ad8699c8d67bdd06c7ba26b2d", "sha256": "6e6ffeffa7f5bcc7480826adf3e926b2abd791083ff29a30992779fa251b2428" }, "downloads": -1, "filename": "troposphere-dns-certificate-1.7.1.tar.gz", "has_sig": true, "md5_digest": "d7e7eb0ad8699c8d67bdd06c7ba26b2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12054, "upload_time": "2019-08-06T18:32:14", "url": "https://files.pythonhosted.org/packages/35/6b/076d73f2d569e9540e5938faf81af6c5c0557be10f64b7afb1850e9b0ee6/troposphere-dns-certificate-1.7.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b16866dd501179f4d4b4525de21cd9e1", "sha256": "be6912eacb568a0c56eeac694ab8d259ae764126ecc6b180e0bc379b66002968" }, "downloads": -1, "filename": "troposphere_dns_certificate-1.7.1-py3-none-any.whl", "has_sig": true, "md5_digest": "b16866dd501179f4d4b4525de21cd9e1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10966, "upload_time": "2019-08-06T18:32:12", "url": "https://files.pythonhosted.org/packages/e3/49/30e78369ec89d1e85b9baf98543ed6d94e3000eda63b2f8ba8bb343bd64d/troposphere_dns_certificate-1.7.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7e7eb0ad8699c8d67bdd06c7ba26b2d", "sha256": "6e6ffeffa7f5bcc7480826adf3e926b2abd791083ff29a30992779fa251b2428" }, "downloads": -1, "filename": "troposphere-dns-certificate-1.7.1.tar.gz", "has_sig": true, "md5_digest": "d7e7eb0ad8699c8d67bdd06c7ba26b2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12054, "upload_time": "2019-08-06T18:32:14", "url": "https://files.pythonhosted.org/packages/35/6b/076d73f2d569e9540e5938faf81af6c5c0557be10f64b7afb1850e9b0ee6/troposphere-dns-certificate-1.7.1.tar.gz" } ] }