Use Step CLI with AWS IAM Roles Anywhere
Maintainer antworten meist innerhalb von 1 Tag
@hslatman arbeitet bereits daran.
Seit 25.2.2025.
Bewertung
Dieses Issue wurde noch nicht bewertet.
Beschreibung
As someone who isn't super familiar with the peculiars of openssl I was looking for something easier. I'm glad I found Step CLI.
My use-case was to setup a lot of instances of IAM Roles Anywhere.
Figured I would share what I did so that maybe someone else can spared the pain.
This is by no means a perfect solution, but should be sufficient to get you started.
There are three main components to IAM Roles Anywhere:
- Trust Anchors
- Profiles
- IAM Roles
I'm not going into details here, as there's plenty of information about it on teh interwebz.
You need a Certificate Authority (Root CA) and it's also recommended to have a Intermediate CA to sign application certificates with.
To create the Root and Intermediate:
create-ca.sh
#!/bin/bash
root_name="${1}"
intermediate_name="${2}"
environment="${3}"
root_ca="root_ca_${environment}.crt"
root_ca_key="root_ca_${environment}.key"
intermediate_ca="intermediate_ca_${environment}.crt"
intermediate_ca_key="intermediate_ca_${environment}.key"
openssl rand -base64 32 > root.txt
openssl rand -base64 32 > intermediate.txt
step certificate create "${root_name}" "${root_ca}" "${root_ca_key}" \
--kty EC \
--curve P-384 \
--profile root-ca \
--not-after 8760h \
--password-file ./root.txt
step certificate create "${intermediate_name}" "${intermediate_ca}" "${intermediate_ca_key}" \
--kty EC \
--curve P-384 \
--profile intermediate-ca \
--not-after 8760h \
--ca "./${root_ca}" \
--ca-key "./${root_ca_key}" \
--password-file ./intermediate.txt
cat "${intermediate_ca}" "${root_ca}" > "ca_${environment}.pem"
Make sure you store the keys very securely!
The resulting .pem files is what you store as the "Certificate bundle" in the Trust Anchor.
Then, for each application (or however you want to slice it) you create the client certificates (role certificate):
create-cert-sh
#!/bin/bash
name="${1}"
environment="${2}"
intermediate_ca="intermediate_ca_${environment}.crt"
intermediate_ca_key="intermediate_ca_${environment}.key"
cert_ca="role_cert_${environment}.pem"
cert_ca_key="role_cert_${environment}.key"
#openssl rand -base64 32 > cert.txt
step certificate create "${name}" "${cert_ca}" "${cert_ca_key}" \
--kty EC \
--curve P-384 \
--profile leaf \
--not-after 8760h \
--ca "./${intermediate_ca}" \
--ca-key "./${intermediate_ca_key}" \
--no-password \
--insecure \
--bundle
Then you can test with:
#!/bin/bash
result=$(./aws_signing_helper credential-process \
--certificate "./role_cert_dev.pem" \
--private-key "./role_cert_dev.key" \
--trust-anchor-arn "<Trust Anchor ARN>" \
--profile-arn "<Profile ARN>" \
--role-arn "<Role ARN>")
export AWS_ACCESS_KEY_ID=$(echo "${result}" | jq -r '.AccessKeyId')
export AWS_SECRET_ACCESS_KEY=$(echo "${result}" | jq -r '.SecretAccessKey')
export AWS_SESSION_TOKEN=$(echo "${result}" | jq -r '.SessionToken')
# depending on the permissions you given the IAM Role you can test it with the AWS CLI here
Note that all certs are valid for 1 year, make sure you change this to be compliant with your company's rules. Usually the client certs should have a shorter TTL.
Hope this helps someone!
Feel free to close this whenever. :)
- Vorherrschende Sprache
- Go
- Sterne
- 4.3k
- Forks
- 320
- Ø Merge
- 2 T. 3 Std.
- Gemergte PRs (30 T.)
- 11
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus smallstep/cli
-
bug needs triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement needs triage
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 32/100
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement needs triage
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 57/100
smallstep/cli#1713 · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement needs triage
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
smallstep/cli#1710 · 1 Kommentar · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag
-
[Bug]: `step ca provisioner add --ca-config` requires `--ca-url`/`--root` even for purely local/offline editsEvtl. vergeben @vulragrag-star hat das vor 51 Tagen übernommen. Offenbug needs triage
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 20/100
smallstep/cli#1705 · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
[FEATURE]: Set fieldPath and reason on the CEL validation rulesEvtl. vergeben @bjosv hat das heute übernommen. Offenenhancement needs-triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
valkey-io/valkey-operator#618 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
agent-butler-finding bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
jordansmall/spindrift#6414 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Icinga/icinga-kubernetes#294 ·
Maintainer antworten meist innerhalb von 4 Tagen
-
Cluster details: the Control Plane version field has a different border color than its icon boxOffenkind/design sig/ui
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 92/100
kubermatic/dashboard#8449 ·
Maintainer antworten meist innerhalb von 1 Tag