Beginnen Sie mit AWS Private CA Connector for Kubernetes. - AWS Private Certificate Authority

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beginnen Sie mit AWS Private CA Connector for Kubernetes.

Die folgenden Themen zeigen, wie Sie die Kommunikation in einem AWS Private CA Kubernetes-Cluster sichern können. Ein weiteres Beispiel finden Sie unter Encryption in transit for Kubernetes on. GitHub

Sie können eine private Zertifizierungsstelle verwenden, um die Kommunikation mit Ihren Amazon EKS-Clustern zu sichern. Beginnen Sie erst, wenn Folgendes vorliegt:

  • Ein AWS Konto mit entsprechenden Berechtigungen im Rahmen Ihrer Sicherheitsrichtlinien.

    Amazon EKS clusters
    JSON
    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "IAM", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:AttachRolePolicy", "iam:GetRole" ], "Resource": "*" }, { "Sid": "EKS", "Effect": "Allow", "Action": [ "eks:CreateAddon", "eks:DescribeAddon", "eks:CreatePodIdentityAssociation", "eks:DescribeCluster" ], "Resource": "*" }, { "Sid": "IAMPassRole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::*:role/CertManagerPrivateCARole" } ] }
    Other clusters
    JSON
    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "GetAndIssuePCACertificates", "Effect": "Allow", "Action": [ "acm-pca:GetCertificate", "acm-pca:IssueCertificate" ], "Resource": "*" }, { "Sid": "RolesAnywhere", "Effect": "Allow", "Action": [ "rolesanywhere:CreateProfile" ], "Resource": "*" }, { "Sid": "IAM", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:AttachRolePolicy" ], "Resource": "*" }, { "Sid": "IAMPassRole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::*:role/CertManagerPrivateCARole" } ] }
  • Ein Kubernetes-Cluster. Informationen zum Erstellen eines Amazon Elastic Kubernetes Service Service-Clusters finden Sie in der Amazon EKS-Schnellstartanleitung. Der Einfachheit halber erstellen Sie eine Umgebungsvariable, die den Clusternamen enthält:

    export CLUSTER=aws-privateca-demo

  • Der AWS-Region Ort, an dem sich Ihr CA- und Amazon EKS-Cluster befinden. Erstellen Sie der Einfachheit halber eine Umgebungsvariable für die Region:

    export REGION=aws-region
  • Der Amazon-Ressourcenname (ARN) einer AWS Private CA privaten Zertifizierungsstelle. Erstellen Sie der Einfachheit halber eine Umgebungsvariable, die den privaten CA-ARN ARN:

    export CA_ARN="arn:aws:acm-pca:region:account:certificate-authority/CA_ID/certificate/certificate_ID"

    Informationen zum Erstellen einer privaten Zertifizierungsstelle finden Sie unter https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html Erstellen einer privaten Zertifizierungsstelle in AWS Private CA

  • Ein Computer, auf dem die folgende Software installiert ist:

Installieren Sie Cert-Manager

Um eine private Zertifizierungsstelle zu verwenden, müssen Sie das cert-manager> Add-on installieren, das Zertifikate anfordert, verteilt und die Zertifikatserneuerung automatisiert. Sie müssen auch das aws-private-ca-issuer Plugin installieren, mit dem Sie private Zertifikate ausstellen können. AWS Private CA Gehen Sie wie folgt vor, um das Add-on und das Plugin zu installieren.

Amazon EKS clusters

cert-managerAls Amazon EKS-Add-on installieren:

aws eks create-addon \ --cluster-name $CLUSTER \ --addon-name cert-manager \ --region $REGION
Other clusters

Installation cert-manager mit Helm:

helm repo add jetstack https://charts.jetstack.io helm repo update helm install cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace \ --set crds.enabled=true

Konfigurieren Sie IAM-Berechtigungen

Das aws-privateca-issuer Plugin benötigt die Erlaubnis, mit dem Sie interagieren können AWS Private CA. Für Amazon EKS-Cluster verwenden Sie die Pod-Identität. Für andere Cluster verwenden Sie AWS Identity and Access Management Roles Anywhere.

Erstellen Sie zunächst eine IAM-Richtlinie. Die Richtlinie verwendet die AWSPrivateCAConnectorForKubernetesPolicy verwaltete Richtlinie. Weitere Informationen zu der Richtlinie finden Sie AWSPrivateCAConnectorForKubernetesPolicyim Referenzhandbuch für AWS verwaltete Richtlinien.

Amazon EKS clusters
  1. Erstellen Sie eine Datei trust-policy.json mit dem Namen, die die folgende Vertrauensrichtlinie enthält:

    JSON
    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "TrustPolicyForEKSClusters", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
  2. Führen Sie die folgenden Befehle aus, um eine IAM-Rolle zu erstellen:

    ROLE_ARN=$(aws iam create-role \ --role-name CertManagerPrivateCARole \ --assume-role-policy-document file://trust-policy.json \ --region $REGION \ --output text \ --query "Role.Arn") aws iam attach-role-policy \ --role-name CertManagerPrivateCARole \ --policy-arn arn:aws:iam::aws:policy/AWSPrivateCAConnectorForKubernetesPolicy
Other clusters
  1. Erstellen Sie einen Vertrauensanker, der der privaten CA vertraut, die in gespeichert ist. CA_ARN Anweisungen finden Sie unter Erste Schritte mit IAM Roles Anywhere. Erstellen Sie eine Umgebungsvariable, um den Vertrauensanker-ARN zu speichern:

    export TRUST_ANCHOR_ARN=trustAnchorArn
  2. Erstellen Sie eine Datei mit dem Namentrust-policy.json, die die folgende Vertrauensrichtlinie enthält:

    JSON
    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "TrustPolicyForSelfManagedOrOnPremiseClusters", "Effect": "Allow", "Principal": { "Service": "rolesanywhere.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity", "sts:TagSession" ], "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/TRUST_ANCHOR_ARN" ] }, "StringEquals": { "aws:PrincipalTag/x509Subject/CN": "aws-privateca-issuer" } } } ] }
  3. Führen Sie die folgenden Befehle aus, um eine IAM-Rolle zu erstellen:

    ROLE_ARN=$(aws iam create-role \ --role-name CertManagerPrivateCARole \ --assume-role-policy-document file://trust-policy.json \ --query "Role.Arn" \ --region $REGION \ --output text) aws iam attach-role-policy \ --role-name CertManagerPrivateCARole \ --region $REGION \ --policy-arn arn:aws:iam::aws:policy/AWSPrivateCAConnectorForKubernetesPolicy

Installieren und konfigurieren Sie den AWS Private CA Cluster-Issuer

Verwenden Sie die folgenden Befehle, um das aws-privateca-connector-for-kubernetes Add-on zu installieren:

Amazon EKS clusters

Erstellen Sie das Add-on:

aws eks create-addon --region $REGION \ --cluster-name $CLUSTER \ --addon-name aws-privateca-connector-for-kubernetes \ --pod-identity-associations "[{ \"serviceAccount\": \"aws-privateca-issuer\", \"roleArn\": \"$ROLE_ARN\" }]"

Warten Sie dann, bis das Add-on aktiv ist:

aws eks describe-addon \ --cluster-name $CLUSTER \ --addon-name aws-privateca-connector-for-kubernetes \ --region $REGION \ --query 'addon.status'
Other clusters
  1. Erstellen Sie ein Profil in IAM Roles Anywhere:

    PROFILE_ARN=$(aws rolesanywhere create-profile \ --name "privateca-profile" \ --role-arns "$ROLE_ARN" \ --region "$REGION" \ --query 'profile.profileArn' \ --enabled \ --output text)
  2. Generieren Sie ein Client-Zertifikat zur Verwendung mit dem Connector für Kubernetes und IAM Roles Anywhere zur Authentifizierung mit: AWS Private CA

    1. Generieren Sie einen privaten Schlüssel für das Client-Zertifikat:

      openssl genrsa -out client.key 2048
    2. Generieren Sie eine Zertifikatsignieranforderung (CSR) für das Client-Zertifikat:

      openssl req -new \ -key client.key \ -out client.csr \ -subj "/CN=aws-privateca-issuer"
    3. Stellen Sie das Client-Zertifikat aus von AWS Private CA:

      CERT_ARN=$(aws acm-pca issue-certificate \ --signing-algorithm SHA256WITHRSA \ --csr fileb://client.csr \ --validity Value=1,Type=DAYS \ --certificate-authority-arn "$CA_ARN" \ --region "$REGION" \ --query 'CertificateArn' \ --output text)
    4. Speichern Sie das Client-Zertifikat lokal:

      aws acm-pca get-certificate \ --certificate-authority-arn $CA_ARN \ --certificate-arn $CERT_ARN \ --region $REGION \ --query 'Certificate' --output text > pca-issuer-client-cert.pem
  3. Installieren Sie den AWS Private CA Aussteller im Cluster mit dem Client-Zertifikat:

    1. Fügen Sie das awspca-Helm-Repository hinzu:

      helm repo add awspca https://cert-manager.github.io/aws-privateca-issuer helm repo update
    2. Erstellen Sie einen Namespace:

      kubectl create namespace aws-privateca-issuer
    3. Verwahren Sie das zuvor erstellte Zertifikat in ein Geheimnis:

      kubectl create secret tls aws-privateca-credentials \ -n aws-privateca-issuer \ --cert=pca-issuer-client-cert.pem \ --key=client.key
  4. Installieren Sie den AWS Private CA Aussteller mit IAM Roles Anywhere:

    1. Erstellen Sie eine Datei mit dem Namenvalues.yaml, um das AWS Private CA Issuer-Plugin für die Verwendung mit folgenden Komponenten zu konfigurieren: IAM Roles Anywhere

      cat > values.yaml <<EOF env: AWS_EC2_METADATA_SERVICE_ENDPOINT: "http://127.0.0.1:9911" extraContainers: - name: "rolesanywhere-credential-helper" image: "public.ecr.aws/rolesanywhere/credential-helper:latest" command: ["aws_signing_helper"] args: - "serve" - "--private-key" - "/etc/cert/tls.key" - "--certificate" - "/etc/cert/tls.crt" - "--role-arn" - "$ROLE_ARN" - "--profile-arn" - "$PROFILE_ARN" - "--trust-anchor-arn" - "$TRUST_ANCHOR_ARN" volumeMounts: - name: cert mountPath: /etc/cert/ readOnly: true volumes: - name: cert secret: secretName: aws-privateca-credentials EOF
    2. Installieren Sie den AWS Private CA Emittenten mit: IAM Roles Anywhere

      helm install aws-privateca-issuer awspca/aws-privateca-issuer \ -n aws-privateca-issuer \ -f values.yaml

Warten Sie, bis der Emittent bereit ist. Verwenden Sie den folgenden Befehl:

kubectl wait --for=condition=ready pods --all -n aws-privateca-issuer --timeout=120s

Überprüfen Sie anschließend die Installation, um sicherzustellen, dass alle Pods den folgenden READY Status erreicht haben:

kubectl -n aws-privateca-issuer get all

Um das zu konfigurierenaws-private-ca-cluster-issuer, erstellen Sie eine YAML-Datei cluster-issuer.yaml mit dem Namen, die die Konfiguration des Ausstellers enthält:

cat > cluster-issuer.yaml <<EOF apiVersion: awspca.cert-manager.io/v1beta1 kind: AWSPCAClusterIssuer metadata: name: aws-privateca-cluster-issuer spec: arn: "$CA_ARN" region: "$REGION" EOF

Wenden Sie als Nächstes die Cluster-Konfiguration an:

kubectl apply -f cluster-issuer.yaml

Überprüfen Sie den Status des Emittenten:

kubectl describe awspcaclusterissuer aws-privateca-cluster-issuer

Es wird eine Antwort ähnlich der folgenden angezeigt:

Status: Conditions: Last Transition Time: 2025-08-13T21:00:00Z Message: AWS PCA Issuer is ready Reason: Verified Status: True Type: Ready

Verwalten Sie das AWS Private CA Client-Zertifikat mit cert-manager

Wenn Sie keinen Amazon EKS-Cluster verwenden, können aws-privateca-issuer Sie nach dem manuellen Bootstrap eines vertrauenswürdigen Zertifikats zu einem Client-Authentifizierungszertifikat wechseln, das von verwaltet wirdcert-manager. Dadurch kann cert-manager das Client-Authentifizierungszertifikat automatisch erneuert werden.

  1. Erstellen Sie eine Datei mit dem Namenpca-auth-cert.yaml:

    cat > pca-auth-cert.yaml <<EOF apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: aws-privateca-client-cert namespace: aws-privateca-issuer spec: secretName: aws-privateca-credentials duration: 168h renewBefore: 48h commonName: aws-privateca-issuer privateKey: algorithm: ECDSA size: 256 rotationPolicy: Always usages: - client auth issuerRef: name: aws-privateca-cluster-issuer kind: AWSPCAClusterIssuer group: awspca.cert-manager.io EOF
  2. Erstellen Sie das neue verwaltete Client-Authentifizierungszertifikat:

    kubectl apply -f pca-auth-cert.yaml
  3. Stellen Sie sicher, dass das Zertifikat erstellt wurde:

    kubectl get certificate aws-privateca-client-cert -n aws-privateca-issuer

    Es wird eine Antwort ähnlich der folgenden angezeigt:

    NAME READY SECRET AGE aws-privateca-client-cert True aws-privateca-credentials 19m

Stellen Sie Ihr erstes TLS-Zertifikat aus

Nachdem die cert-manager und installiert aws-privateca-issuer sind, können Sie ein Zertifikat ausstellen.

Erstellen Sie eine YAML-Datei certificate.yaml mit dem Namen, die die Zertifikatsressource enthält:

cat > certificate.yaml <<EOF apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: example-certificate namespace: default spec: secretName: example-certificate-tls issuerRef: name: aws-privateca-cluster-issuer kind: AWSPCAClusterIssuer group: awspca.cert-manager.io commonName: example.internal dnsNames: - example.internal - api.example.internal duration: 2160h # 90 days renewBefore: 360h # 15 days usages: - digital signature - key encipherment - server auth EOF

Wenden Sie das Zertifikat mit dem folgenden Befehl an:

kubectl apply -f certificate.yaml

Anschließend können Sie den Status des Zertifikats mit den folgenden Befehlen überprüfen:

kubectl get certificate example-certificate kubectl describe certificate example-certificate

Sie sollten eine Antwort ähnlich der folgenden sehen:

NAME READY SECRET AGE example-certificate True example-certificate-tls 30s

Sie können das ausgestellte Zertifikat mit dem folgenden Befehl überprüfen:

kubectl get secret example-certificate-tls -o yaml

Sie können das Zertifikat auch mit dem folgenden Befehl dekodieren und überprüfen:

kubectl get secret example-certificate-tls -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -noout