Comience a utilizar AWS Private CA Connector for Kubernetes. - AWS Private Certificate Authority

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Comience a utilizar AWS Private CA Connector for Kubernetes.

En los siguientes temas, se muestra cómo utilizarlos AWS Private CA para proteger las comunicaciones en un clúster de Kubernetes. Para ver otro ejemplo, consulta Encryption in transit for Kubernetes on. GitHub

Puede utilizar una autoridad de certificación privada para proteger las comunicaciones con sus clústeres de Amazon EKS. Antes de comenzar, asegúrese de que dispone de lo siguiente:

  • Una AWS cuenta con los permisos adecuados dentro del ámbito de sus políticas de seguridad.

    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" } ] }
  • Un clúster de Kubernetes. Para crear un clúster de Amazon Elastic Kubernetes Service, consulte la guía de inicio rápido de Amazon EKS. Para simplificar, cree una variable de entorno que contenga el nombre del clúster:

    export CLUSTER=aws-privateca-demo

  • El Región de AWS lugar donde se encuentran su clúster de CA y Amazon EKS. Para simplificar, cree una variable de entorno que contenga la región:

    export REGION=aws-region
  • El nombre de recurso de Amazon (ARN) de una entidad de certificación AWS Private CA privada. Para simplificar, cree una variable de entorno que contenga el ARN de CA privado:

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

    Para crear una CA privada, consulte https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html Crear una CA privada en AWS Private CA

  • Un ordenador con el siguiente software instalado:

Instale cert-manager

Para usar una CA privada, debe instalar el cert-manager> complemento que solicita los certificados, los distribuye y automatiza la renovación de los certificados. También debe instalar el aws-private-ca-issuer complemento que le permite emitir certificados privados desde. AWS Private CA Siga los siguientes pasos para instalar el complemento y el complemento.

Amazon EKS clusters

Instálelo cert-manager como complemento de Amazon EKS:

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

Instálelo cert-manager con 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

Configurar los permisos de IAM

El aws-privateca-issuer complemento requiere permiso para interactuar con él AWS Private CA. Para los clústeres de Amazon EKS, utilice la identidad del pod. Para otros clústeres, utilice AWS Identity and Access Management Roles Anywhere.

En primer lugar, cree una política de IAM. La política utiliza la política AWSPrivateCAConnectorForKubernetesPolicy gestionada. Para obtener más información sobre la política, consulte la guía AWSPrivateCAConnectorForKubernetesPolicyde referencia de políticas AWS gestionadas.

Amazon EKS clusters
  1. Cree un archivo con el nombre trust-policy.json que contenga la siguiente política de confianza:

    JSON
    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "TrustPolicyForEKSClusters", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
  2. Ejecute los siguientes comandos para crear un rol de IAM:

    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. Cree un ancla de confianza que confíe en la CA privada en CA_ARN la que está almacenada. Para obtener instrucciones, consulte Cómo empezar con IAM Roles Anywhere. Cree una variable de entorno para almacenar el ARN del ancla de confianza:

    export TRUST_ANCHOR_ARN=trustAnchorArn
  2. Cree un archivo trust-policy.json que contenga la siguiente política de confianza:

    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. Ejecute los siguientes comandos para crear un rol de IAM:

    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

Instale y configure el emisor del AWS Private CA clúster

Para instalar el aws-privateca-connector-for-kubernetes complemento, utilice los siguientes comandos:

Amazon EKS clusters

Crea el complemento:

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\" }]"

A continuación, espera a que el complemento esté activo:

aws eks describe-addon \ --cluster-name $CLUSTER \ --addon-name aws-privateca-connector-for-kubernetes \ --region $REGION \ --query 'addon.status'
Other clusters
  1. Crea un perfil en 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. Genere un certificado de cliente para usarlo con el Connector for Kubernetes y para IAM Roles Anywhere autenticarse con: AWS Private CA

    1. Genere una clave privada para el certificado de cliente:

      openssl genrsa -out client.key 2048
    2. Genere una solicitud de firma de certificado (CSR) para el certificado del cliente:

      openssl req -new \ -key client.key \ -out client.csr \ -subj "/CN=aws-privateca-issuer"
    3. Emita el certificado de cliente desde 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. Guarde el certificado de cliente localmente:

      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. Instale el AWS Private CA emisor en el clúster con el certificado de cliente:

    1. Agregue el repositorio awspca de Helm:

      helm repo add awspca https://cert-manager.github.io/aws-privateca-issuer helm repo update
    2. Cree un espacio de nombres:

      kubectl create namespace aws-privateca-issuer
    3. Guarde el certificado creado anteriormente en un secreto:

      kubectl create secret tls aws-privateca-credentials \ -n aws-privateca-issuer \ --cert=pca-issuer-client-cert.pem \ --key=client.key
  4. Instale el AWS Private CA emisor con IAM Roles Anywhere:

    1. Cree un archivo con el nombre values.yaml correspondiente a la configuración del complemento AWS Private CA emisor para usarlo con: 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. Instale el AWS Private CA emisor con: IAM Roles Anywhere

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

Espere a que el emisor esté listo. Utilice el siguiente comando :

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

Y, a continuación, verifica la instalación para asegurarte de que todos los pods hayan alcanzado el READY estado siguiente:

kubectl -n aws-privateca-issuer get all

Para configurarlosaws-private-ca-cluster-issuer, crea un archivo YAML con un nombre cluster-issuer.yaml que contenga la configuración del emisor:

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

A continuación, aplique la configuración del clúster:

kubectl apply -f cluster-issuer.yaml

Compruebe el estado del emisor:

kubectl describe awspcaclusterissuer aws-privateca-cluster-issuer

Verá una respuesta parecida a la siguiente:

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

Administre el certificado del AWS Private CA cliente con cert-manager

Si no utiliza un clúster de Amazon EKS, después de iniciar manualmente un certificado de confianza, aws-privateca-issuer puede realizar la transición a un certificado de autenticación de cliente gestionado porcert-manager. Esto permite cert-manager renovar automáticamente el certificado de autenticación del cliente.

  1. Cree un archivo llamadopca-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. Cree el nuevo certificado de autenticación de cliente administrado:

    kubectl apply -f pca-auth-cert.yaml
  3. Valide que se haya creado el certificado:

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

    Verá una respuesta parecida a la siguiente:

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

Emita su primer certificado TLS

Ahora que los cert-manager y aws-privateca-issuer están instalados, puede emitir un certificado.

Cree un archivo YAML con el nombre certificate.yaml que contenga el recurso del certificado:

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

Aplique el certificado mediante el siguiente comando:

kubectl apply -f certificate.yaml

A continuación, puede comprobar el estado del certificado con los siguientes comandos:

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

Deberías ver una respuesta similar a esta:

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

Puede inspeccionar el certificado emitido con el siguiente comando:

kubectl get secret example-certificate-tls -o yaml

También puede decodificar y examinar el certificado con el siguiente comando:

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