Skip to content

Commit c84b1b6

Browse files
joshmyersosterman
authored andcommitted
Terraform TLS SSH key pair to SSM initial implementation (#2)
* Initial implementation * Add readme * Enable both RSA + ECDSA keys to be written to SSM This commit adds some default variables and locals for naming of SSM params. We expect SSM params to be written in the form `/foo/bar` or `/foo/bar_badger` where foo is var.ssm_path_prefix and bar is passed in explicitly, or else we default to label.id where we replace the delimiter with underscores to maintain consistency. Both RSA + ECDSA key algo’s are supported. * Add full example
1 parent 4472210 commit c84b1b6

File tree

15 files changed

+680
-3
lines changed

15 files changed

+680
-3
lines changed

.gitignore

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Local .terraform directories
2+
**/.terraform/*
3+
4+
# .tfstate files
5+
*.tfstate
6+
*.tfstate.*
7+
8+
**/.idea
9+
**/*.iml
10+
11+
**/.build-harness
12+
**/build-harness

.travis.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
addons:
2+
apt:
3+
packages:
4+
- git
5+
- make
6+
- curl
7+
8+
install:
9+
- make init
10+
11+
script:
12+
- make terraform/install
13+
- make terraform/get-plugins
14+
- make terraform/get-modules
15+
- make terraform/lint
16+
- make terraform/validate

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@
186186
same "printed page" as the copyright notice for easier
187187
identification within third-party archives.
188188

189-
Copyright [yyyy] [name of copyright owner]
189+
Copyright 2019 Cloud Posse, LLC
190190

191191
Licensed under the Apache License, Version 2.0 (the "License");
192192
you may not use this file except in compliance with the License.

Makefile

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
SHELL := /bin/bash
2+
3+
# List of targets the `readme` target should call before generating the readme
4+
export README_DEPS ?= docs/targets.md docs/terraform.md
5+
6+
-include $(shell curl -sSL -o .build-harness "https://git.io/build-harness"; echo .build-harness)
7+
8+
## Lint terraform code
9+
lint:
10+
$(SELF) terraform/install terraform/get-modules terraform/get-plugins terraform/lint terraform/validate

README.md

Lines changed: 275 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,275 @@
1-
# terraform-aws-ssm-tls-ssh-key-pair
2-
Terraform module that provisions an SSH TLS Key pair and writes it to SSM Parameter Store
1+
<!-- This file was automatically generated by the `build-harness`. Make all changes to `README.yaml` and run `make readme` to rebuild this file. -->
2+
[![README Header][readme_header_img]][readme_header_link]
3+
4+
[![Cloud Posse][logo]](https://cpco.io/homepage)
5+
6+
# terraform-aws-ssm-tls-ssh-key-pair [![Build Status](https://travis-ci.org/cloudposse/terraform-aws-ssm-tls-ssh-key-pair.svg?branch=master)](https://travis-ci.org/cloudposse/terraform-aws-ssm-tls-ssh-key-pair) [![Latest Release](https://img.shields.io/github/release/cloudposse/terraform-aws-ssm-tls-ssh-key-pair.svg)](https://github.com/cloudposse/terraform-aws-ssm-tls-ssh-key-pair/releases/latest) [![Slack Community](https://slack.cloudposse.com/badge.svg)](https://slack.cloudposse.com)
7+
8+
9+
Terraform module that provisions an SSH TLS key pair and writes it to SSM Parameter Store.
10+
11+
12+
---
13+
14+
This project is part of our comprehensive ["SweetOps"](https://cpco.io/sweetops) approach towards DevOps.
15+
[<img align="right" title="Share via Email" src="https://docs.cloudposse.com/images/ionicons/ios-email-outline-2.0.1-16x16-999999.svg"/>][share_email]
16+
[<img align="right" title="Share on Google+" src="https://docs.cloudposse.com/images/ionicons/social-googleplus-outline-2.0.1-16x16-999999.svg" />][share_googleplus]
17+
[<img align="right" title="Share on Facebook" src="https://docs.cloudposse.com/images/ionicons/social-facebook-outline-2.0.1-16x16-999999.svg" />][share_facebook]
18+
[<img align="right" title="Share on Reddit" src="https://docs.cloudposse.com/images/ionicons/social-reddit-outline-2.0.1-16x16-999999.svg" />][share_reddit]
19+
[<img align="right" title="Share on LinkedIn" src="https://docs.cloudposse.com/images/ionicons/social-linkedin-outline-2.0.1-16x16-999999.svg" />][share_linkedin]
20+
[<img align="right" title="Share on Twitter" src="https://docs.cloudposse.com/images/ionicons/social-twitter-outline-2.0.1-16x16-999999.svg" />][share_twitter]
21+
22+
23+
[![Terraform Open Source Modules](https://docs.cloudposse.com/images/terraform-open-source-modules.svg)][terraform_modules]
24+
25+
26+
27+
It's 100% Open Source and licensed under the [APACHE2](LICENSE).
28+
29+
30+
31+
32+
33+
34+
35+
We literally have [*hundreds of terraform modules*][terraform_modules] that are Open Source and well-maintained. Check them out!
36+
37+
38+
39+
40+
41+
42+
43+
## Usage
44+
45+
```hcl
46+
module "ssm_tls_ssh_key_pair" {
47+
source = "git::https://github.com/cloudposse/terraform-aws-ssm-tls-ssh-key-pair.git?ref=master"
48+
namespace = "eg"
49+
stage = "prod"
50+
name = "app"
51+
ssm_path_prefix = "ssh_keys"
52+
ssh_key_algorithm = "ECDSA"
53+
}
54+
```
55+
56+
57+
58+
59+
60+
61+
## Makefile Targets
62+
```
63+
Available targets:
64+
65+
help Help screen
66+
help/all Display help for all targets
67+
help/short This help short screen
68+
lint Lint terraform code
69+
70+
```
71+
72+
## Inputs
73+
74+
| Name | Description | Type | Default | Required |
75+
|------|-------------|:----:|:-----:|:-----:|
76+
| attributes | Additional attributes (e.g. `1`) | list | `<list>` | no |
77+
| delimiter | Delimiter to be used between `namespace`, `stage`, `name` and `attributes` | string | `-` | no |
78+
| ecdsa_curve | When ssh_key_algorithm is 'ECDSA', the name of the elliptic curve to use. May be any one of 'P256', 'P384' or P521' | string | `P256` | no |
79+
| enable_kms_key_rotation | Whether KMS key rotation is enabled | string | `true` | no |
80+
| enabled | Whether to create the resources. Set to `false` to prevent the module from creating any resources | string | `true` | no |
81+
| name | Application or solution name (e.g. `app`) | string | - | yes |
82+
| namespace | Namespace (e.g. `eg` or `cp`) | string | - | yes |
83+
| overwrite_ssm_parameter | Whether to overwrite an existing SSM parameter | string | `true` | no |
84+
| rsa_bits | When ssh_key_algorithm is 'RSA', the size of the generated RSA key in bits | string | `4096` | no |
85+
| ssh_key_algorithm | SSH key algorithm to use. Currently-supported values are 'RSA' and 'ECDSA' | string | `RSA` | no |
86+
| ssh_private_key_name | SSM Parameter name of the SSH private key | string | `` | no |
87+
| ssh_public_key_name | SSM Parameter name of the SSH public key | string | `` | no |
88+
| ssm_path_prefix | The SSM parameter path prefix (e.g. /$ssm_path_prefix/$key_name) | string | `ssh_keys` | no |
89+
| stage | Stage (e.g. `prod`, `dev`, `staging`) | string | - | yes |
90+
| tags | Additional tags (e.g. map(`BusinessUnit`,`XYZ`) | map | `<map>` | no |
91+
92+
## Outputs
93+
94+
| Name | Description |
95+
|------|-------------|
96+
| public_key | Contents of the generated public key |
97+
98+
99+
100+
101+
## Share the Love
102+
103+
Like this project? Please give it a ★ on [our GitHub](https://github.com/cloudposse/terraform-aws-ssm-tls-ssh-key-pair)! (it helps us **a lot**)
104+
105+
Are you using this project or any of our other projects? Consider [leaving a testimonial][testimonial]. =)
106+
107+
108+
## Related Projects
109+
110+
Check out these related projects.
111+
112+
- [terraform-aws-key-pair](https://github.com/cloudposse/terraform-aws-key-pair) - Terraform Module to Automatically Generate SSH key Pairs (Public/Private Keys)
113+
- [terraform-tls-ssh-key-pair](https://github.com/cloudposse/terraform-tls-ssh-key-pair) - Terraform module for generating an SSH public key file
114+
115+
116+
117+
## Help
118+
119+
**Got a question?**
120+
121+
File a GitHub [issue](https://github.com/cloudposse/terraform-aws-ssm-tls-ssh-key-pair/issues), send us an [email][email] or join our [Slack Community][slack].
122+
123+
[![README Commercial Support][readme_commercial_support_img]][readme_commercial_support_link]
124+
125+
## Commercial Support
126+
127+
Work directly with our team of DevOps experts via email, slack, and video conferencing.
128+
129+
We provide [*commercial support*][commercial_support] for all of our [Open Source][github] projects. As a *Dedicated Support* customer, you have access to our team of subject matter experts at a fraction of the cost of a full-time engineer.
130+
131+
[![E-Mail](https://img.shields.io/badge/email-hello@cloudposse.com-blue.svg)][email]
132+
133+
- **Questions.** We'll use a Shared Slack channel between your team and ours.
134+
- **Troubleshooting.** We'll help you triage why things aren't working.
135+
- **Code Reviews.** We'll review your Pull Requests and provide constructive feedback.
136+
- **Bug Fixes.** We'll rapidly work to fix any bugs in our projects.
137+
- **Build New Terraform Modules.** We'll [develop original modules][module_development] to provision infrastructure.
138+
- **Cloud Architecture.** We'll assist with your cloud strategy and design.
139+
- **Implementation.** We'll provide hands-on support to implement our reference architectures.
140+
141+
142+
143+
## Terraform Module Development
144+
145+
Are you interested in custom Terraform module development? Submit your inquiry using [our form][module_development] today and we'll get back to you ASAP.
146+
147+
148+
## Slack Community
149+
150+
Join our [Open Source Community][slack] on Slack. It's **FREE** for everyone! Our "SweetOps" community is where you get to talk with others who share a similar vision for how to rollout and manage infrastructure. This is the best place to talk shop, ask questions, solicit feedback, and work together as a community to build totally *sweet* infrastructure.
151+
152+
## Newsletter
153+
154+
Signup for [our newsletter][newsletter] that covers everything on our technology radar. Receive updates on what we're up to on GitHub as well as awesome new projects we discover.
155+
156+
## Contributing
157+
158+
### Bug Reports & Feature Requests
159+
160+
Please use the [issue tracker](https://github.com/cloudposse/terraform-aws-ssm-tls-ssh-key-pair/issues) to report any bugs or file feature requests.
161+
162+
### Developing
163+
164+
If you are interested in being a contributor and want to get involved in developing this project or [help out](https://cpco.io/help-out) with our other projects, we would love to hear from you! Shoot us an [email][email].
165+
166+
In general, PRs are welcome. We follow the typical "fork-and-pull" Git workflow.
167+
168+
1. **Fork** the repo on GitHub
169+
2. **Clone** the project to your own machine
170+
3. **Commit** changes to your own branch
171+
4. **Push** your work back up to your fork
172+
5. Submit a **Pull Request** so that we can review your changes
173+
174+
**NOTE:** Be sure to merge the latest changes from "upstream" before making a pull request!
175+
176+
177+
## Copyright
178+
179+
Copyright © 2017-2019 [Cloud Posse, LLC](https://cpco.io/copyright)
180+
181+
182+
183+
## License
184+
185+
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
186+
187+
See [LICENSE](LICENSE) for full details.
188+
189+
Licensed to the Apache Software Foundation (ASF) under one
190+
or more contributor license agreements. See the NOTICE file
191+
distributed with this work for additional information
192+
regarding copyright ownership. The ASF licenses this file
193+
to you under the Apache License, Version 2.0 (the
194+
"License"); you may not use this file except in compliance
195+
with the License. You may obtain a copy of the License at
196+
197+
https://www.apache.org/licenses/LICENSE-2.0
198+
199+
Unless required by applicable law or agreed to in writing,
200+
software distributed under the License is distributed on an
201+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
202+
KIND, either express or implied. See the License for the
203+
specific language governing permissions and limitations
204+
under the License.
205+
206+
207+
208+
209+
210+
211+
212+
213+
214+
## Trademarks
215+
216+
All other trademarks referenced herein are the property of their respective owners.
217+
218+
## About
219+
220+
This project is maintained and funded by [Cloud Posse, LLC][website]. Like it? Please let us know by [leaving a testimonial][testimonial]!
221+
222+
[![Cloud Posse][logo]][website]
223+
224+
We're a [DevOps Professional Services][hire] company based in Los Angeles, CA. We ❤️ [Open Source Software][we_love_open_source].
225+
226+
We offer [paid support][commercial_support] on all of our projects.
227+
228+
Check out [our other projects][github], [follow us on twitter][twitter], [apply for a job][jobs], or [hire us][hire] to help with your cloud strategy and implementation.
229+
230+
231+
232+
### Contributors
233+
234+
| [![Erik Osterman][osterman_avatar]][osterman_homepage]<br/>[Erik Osterman][osterman_homepage] | [![Josh Myers][joshmyers_avatar]][joshmyers_homepage]<br/>[Josh Myers][joshmyers_homepage] |
235+
|---|---|
236+
237+
[osterman_homepage]: https://github.com/osterman
238+
[osterman_avatar]: https://github.com/osterman.png?size=150
239+
[joshmyers_homepage]: https://github.com/joshmyers
240+
[joshmyers_avatar]: https://github.com/joshmyers.png?size=150
241+
242+
243+
244+
[![README Footer][readme_footer_img]][readme_footer_link]
245+
[![Beacon][beacon]][website]
246+
247+
[logo]: https://cloudposse.com/logo-300x69.svg
248+
[docs]: https://cpco.io/docs
249+
[website]: https://cpco.io/homepage
250+
[github]: https://cpco.io/github
251+
[jobs]: https://cpco.io/jobs
252+
[hire]: https://cpco.io/hire
253+
[slack]: https://cpco.io/slack
254+
[linkedin]: https://cpco.io/linkedin
255+
[twitter]: https://cpco.io/twitter
256+
[testimonial]: https://cpco.io/leave-testimonial
257+
[newsletter]: https://cpco.io/newsletter
258+
[email]: https://cpco.io/email
259+
[commercial_support]: https://cpco.io/commercial-support
260+
[we_love_open_source]: https://cpco.io/we-love-open-source
261+
[module_development]: https://cpco.io/module-development
262+
[terraform_modules]: https://cpco.io/terraform-modules
263+
[readme_header_img]: https://cloudposse.com/readme/header/img?repo=cloudposse/terraform-aws-ssm-tls-ssh-key-pair
264+
[readme_header_link]: https://cloudposse.com/readme/header/link?repo=cloudposse/terraform-aws-ssm-tls-ssh-key-pair
265+
[readme_footer_img]: https://cloudposse.com/readme/footer/img?repo=cloudposse/terraform-aws-ssm-tls-ssh-key-pair
266+
[readme_footer_link]: https://cloudposse.com/readme/footer/link?repo=cloudposse/terraform-aws-ssm-tls-ssh-key-pair
267+
[readme_commercial_support_img]: https://cloudposse.com/readme/commercial-support/img?repo=cloudposse/terraform-aws-ssm-tls-ssh-key-pair
268+
[readme_commercial_support_link]: https://cloudposse.com/readme/commercial-support/link?repo=cloudposse/terraform-aws-ssm-tls-ssh-key-pair
269+
[share_twitter]: https://twitter.com/intent/tweet/?text=terraform-aws-ssm-tls-ssh-key-pair&url=https://github.com/cloudposse/terraform-aws-ssm-tls-ssh-key-pair
270+
[share_linkedin]: https://www.linkedin.com/shareArticle?mini=true&title=terraform-aws-ssm-tls-ssh-key-pair&url=https://github.com/cloudposse/terraform-aws-ssm-tls-ssh-key-pair
271+
[share_reddit]: https://reddit.com/submit/?url=https://github.com/cloudposse/terraform-aws-ssm-tls-ssh-key-pair
272+
[share_facebook]: https://facebook.com/sharer/sharer.php?u=https://github.com/cloudposse/terraform-aws-ssm-tls-ssh-key-pair
273+
[share_googleplus]: https://plus.google.com/share?url=https://github.com/cloudposse/terraform-aws-ssm-tls-ssh-key-pair
274+
[share_email]: mailto:?subject=terraform-aws-ssm-tls-ssh-key-pair&body=https://github.com/cloudposse/terraform-aws-ssm-tls-ssh-key-pair
275+
[beacon]: https://ga-beacon.cloudposse.com/UA-76589703-4/cloudposse/terraform-aws-ssm-tls-ssh-key-pair?pixel&cs=github&cm=readme&an=terraform-aws-ssm-tls-ssh-key-pair

README.yaml

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
---
2+
#
3+
# This is the canonical configuration for the `README.md`
4+
# Run `make readme` to rebuild the `README.md`
5+
#
6+
7+
# Name of this project
8+
name: terraform-aws-ssm-tls-ssh-key-pair
9+
10+
# Logo for this project
11+
#logo: docs/logo.png
12+
13+
# License of this project
14+
license: "APACHE2"
15+
16+
# Canonical GitHub repo
17+
github_repo: cloudposse/terraform-aws-ssm-tls-ssh-key-pair
18+
19+
# Badges to display
20+
badges:
21+
- name: "Build Status"
22+
image: "https://travis-ci.org/cloudposse/terraform-aws-ssm-tls-ssh-key-pair.svg?branch=master"
23+
url: "https://travis-ci.org/cloudposse/terraform-aws-ssm-tls-ssh-key-pair"
24+
- name: "Latest Release"
25+
image: "https://img.shields.io/github/release/cloudposse/terraform-aws-ssm-tls-ssh-key-pair.svg"
26+
url: "https://github.com/cloudposse/terraform-aws-ssm-tls-ssh-key-pair/releases/latest"
27+
- name: "Slack Community"
28+
image: "https://slack.cloudposse.com/badge.svg"
29+
url: "https://slack.cloudposse.com"
30+
31+
related:
32+
- name: "terraform-aws-key-pair"
33+
description: "Terraform Module to Automatically Generate SSH key Pairs (Public/Private Keys)"
34+
url: "https://github.com/cloudposse/terraform-aws-key-pair"
35+
- name: "terraform-tls-ssh-key-pair"
36+
description: "Terraform module for generating an SSH public key file"
37+
url: "https://github.com/cloudposse/terraform-tls-ssh-key-pair"
38+
39+
# Short description of this project
40+
description: |-
41+
Terraform module that provisions an SSH TLS key pair and writes it to SSM Parameter Store.
42+
43+
# How to use this project
44+
usage: |-
45+
```hcl
46+
module "ssm_tls_ssh_key_pair" {
47+
source = "git::https://github.com/cloudposse/terraform-aws-ssm-tls-ssh-key-pair.git?ref=master"
48+
namespace = "eg"
49+
stage = "prod"
50+
name = "app"
51+
ssm_path_prefix = "ssh_keys"
52+
ssh_key_algorithm = "ECDSA"
53+
}
54+
```
55+
56+
include:
57+
- "docs/targets.md"
58+
- "docs/terraform.md"
59+
60+
# Contributors to this project
61+
contributors:
62+
- name: "Erik Osterman"
63+
github: "osterman"
64+
- name: "Josh Myers"
65+
github: "joshmyers"

0 commit comments

Comments
 (0)