Blog de Amazon Web Services (AWS)

Cómo Moeve protege cargas externas con PKI privada y AWS IAM Roles

Por Rayco Martínez, Jesús Monda e Ignacio Rodríguez.

En entornos empresariales complejos, la gestión de identidades ya no se limita al perímetro de AWS. Las organizaciones operan cargas de trabajo distribuidas entre entornos on-premises, edge, otras nubes y plataformas de terceros que necesitan interactuar con servicios AWS de forma segura y controlada.

Como parte de su estrategia de mejora continua de la seguridad, Moeve lleva años evolucionando los mecanismos utilizados por las cargas de trabajo para acceder a AWS. En escenarios donde el uso de credenciales programáticas era necesario, la organización implantó controles centralizados para su gestión, rotación y gobierno, tal y como se describe en el blog: «Gestión automática y segura de Access Keys a escala en AWS». Sin embargo, cuando se trata de integraciones machine-to-machine, el objetivo es avanzar hacia modelos que eliminen por completo la dependencia de credenciales persistentes.

En este contexto, Moeve, compañía energética global anteriormente conocida como Cepsa, ha adoptado AWS IAM Roles Anywhere como mecanismo para que las cargas de trabajo externas puedan autenticarse frente a AWS mediante certificados X.509 y obtener credenciales temporales, suprimiendo la necesidad de exponer mecanismos de acceso persistente ni extender el plano de identidad corporativo fuera de su dominio natural.

Este enfoque sustituye la confianza basada en secretos compartidos por un modelo fundamentado en certificados X.509 y una Infraestructura de Clave Pública (PKI – Public Key Infrastructure) privada, que pasa a convertirse en el elemento central del diseño. La identidad de la carga de trabajo deja de depender de credenciales estáticas y pasa a sustentarse en un certificado emitido por una Autoridad de Certificación (CA – Certificate Authority) de confianza.

Para ello, Moeve, en colaboración con Keepler, partner de la AWS Partner Network (APN), y AWS han diseñado una PKI privada basada en AWS Private Certificate Authority, estructurada en una jerarquía de autoridades de certificación e integrada con IAM Roles Anywhere mediante trust anchors, profiles y roles de AWS Identity and Access Management (IAM), todo ello bajo el modelo de gobernanza del Cloud Center of Excellence (CCoE). La separación entre CA raíz y CA subordinadas, así como el uso de mecanismos de revocación mediante Listas de Revocación de Certificados (CRL – Certificate Revocation List), forma parte de las prácticas base de esta arquitectura PKI.

Requisitos previos

Para implementar una solución similar a la descrita en este blog, se recomienda disponer de:

  • Una organización multi-cuenta gestionada con AWS Organizations.
  • Capacidad de despliegue centralizado mediante AWS CloudFormation StackSets.
  • Una PKI privada desplegada sobre AWS Private Certificate Authority.
  • Una jerarquía de certificación compuesta, al menos, por una CA raíz y una CA subordinada.
  • Mecanismos de revocación definidos, por ejemplo, mediante CRL.
  • Procedimientos para la generación de Solicitudes de Firma de Certificado (CSR – Certificate Signing Request) por parte de las cargas de trabajo consumidoras.

Además, es preferible tener nociones sobre:

  • Conocimiento de AWS IAM, roles y políticas.
  • Familiaridad con AWS IAM Roles Anywhere.
  • Conocimientos operativos de Linux y Windows para integrar aws_signing_helper.

El reto de gestionar identidades fuera de AWS

Autenticar cargas de trabajo externas de forma segura plantea un reto distinto al de gestionar identidades nativas en AWS. En Moeve, este reto abarca desde aplicaciones on-premises hasta sistemas Windows y Linux desplegados fuera de la organización AWS, así como integraciones operadas desde otros entornos corporativos.

El objetivo del CCoE no era únicamente habilitar acceso técnico, sino hacerlo bajo un modelo gobernado donde la confianza estuviera centralizada, la identidad de la carga de trabajo fuera verificable y las credenciales emitidas por AWS fueran temporales y trazables.

IAM Roles Anywhere habilita este modelo, pero su adopción introduce un nuevo dominio de diseño: la gestión de la confianza criptográfica. Ya no basta con definir permisos IAM; es necesario decidir qué autoridades de certificación son válidas, cómo se emiten los certificados, cómo se revocan y cómo se gobierna esta confianza a escala organizativa.

El caso de uso se centra especialmente en comunicaciones machine-to-machine, donde no existe intervención interactiva de un usuario, y la carga de trabajo necesita obtener credenciales de forma automatizada, trazable y con permisos acotados.

Principios de diseño de la solución

Para abordar este modelo, el CCoE de Moeve definió un conjunto de principios orientados a garantizar seguridad, control y escalabilidad.

El primero es la separación de responsabilidades dentro de la PKI. La CA raíz se utiliza exclusivamente como ancla de confianza y solo firma autoridades subordinadas. La emisión de certificados de carga de trabajo se delega en CA subordinadas, evitando exponer operativamente la raíz. Este patrón se alinea con las buenas prácticas de AWS Private CA y de diseño de una jerarquía PKI privada, donde la raíz no debe emitir certificados directamente y la emisión operativa recae en autoridades subordinadas.

El segundo principio es la centralización de la confianza en el CCoE. La creación de la jerarquía PKI, la definición de políticas de emisión, la configuración de revocación y la publicación del trust anchor en AWS son responsabilidades del equipo central. Los equipos consumidores usan el servicio dentro de un marco definido, pero no administran la infraestructura de confianza.

El tercer principio es la separación explícita entre autenticación y autorización. El certificado X.509 se utiliza únicamente para autenticar la carga de trabajo frente a IAM Roles Anywhere. Los permisos efectivos siguen gestionándose mediante roles y políticas IAM, manteniendo consistencia con el modelo de autorización ya existente en la organización.

El cuarto principio es la custodia local de la clave privada. Cada consumidor genera localmente su par de claves y remite una CSR para su firma. De este modo, la clave privada nunca abandona el entorno de la carga de trabajo, reduciendo la superficie de exposición y simplificando el modelo de custodia.

El quinto principio es el control centralizado del acceso externo. Solo el CCoE puede crear profiles de IAM Roles Anywhere, lo que permite decidir de forma centralizada qué roles pueden asumirse desde fuera de la organización y bajo qué condiciones.

Por último, la solución se diseña para operar en entornos multi-cuenta, manteniendo presente que IAM Roles Anywhere es un servicio regional. Esto implica que los trust anchors, los profiles y las llamadas de autenticación deben alinearse con la región donde se despliega la solución.

Fundamentos de PKI en este modelo

Antes de entrar en la arquitectura, conviene detenerse en el papel que juega la PKI dentro de esta solución.

Una infraestructura de clave pública se basa en una jerarquía de confianza. En la parte superior se sitúa la CA raíz, que representa el máximo nivel de confianza y cuyo certificado es autofirmado. Esta autoridad no debe emitir certificados directamente a las cargas de trabajo. Por debajo se sitúan las CA subordinadas, encargadas de firmar los certificados operativos. Esta separación reduce el riesgo y aísla el componente más sensible de la jerarquía.

Cada carga de trabajo genera su propio par de claves y produce una CSR. La CA subordinada firma esa CSR y emite un certificado X.509. El resultado no es solo un certificado aislado, sino una identidad que puede validarse recorriendo la cadena de certificación hasta la CA raíz.

En este modelo también resulta esencial la revocación. Las CRL permiten invalidar certificados antes de su expiración, por ejemplo, ante el compromiso de una clave privada o la retirada de una carga de trabajo. En la base PKI de Moeve, la CRL se publica sobre Amazon S3, que actúa como repositorio central del estado de revocación de los certificados emitidos. Opcionalmente, puede exponerse mediante Amazon CloudFront cuando se requiere facilitar su acceso desde múltiples ubicaciones o consumidores externos.

La revocación debe analizarse con especial cuidado en arquitecturas machine-to-machine. La invalidación de un certificado afecta exclusivamente a la identidad asociada a dicho certificado y no al resto de certificados emitidos por la misma autoridad de certificación. Sin embargo, la revocación de una CA subordinada sí implicaría la pérdida de confianza sobre todos los certificados emitidos por esa autoridad, por lo que este tipo de operaciones deben evaluarse cuidadosamente.

Desde un punto de vista operativo, resulta fundamental mantener la trazabilidad entre certificados emitidos, cargas de trabajo consumidoras, perfiles de IAM Roles Anywhere y roles IAM asociados. Esta relación permite estimar el impacto de una revocación antes de ejecutarla, identificando qué integraciones, automatismos o procesos machine-to-machine podrían verse afectados y facilitando la planificación de renovaciones o sustituciones controladas.

En la solución de Moeve, este proceso adquiere una relevancia adicional debido a que IAM Roles Anywhere no actualiza automáticamente las CRL una vez configuradas en un trust anchor. Para mantener alineado el estado de confianza entre la PKI y AWS, el CCoE ha implementado un mecanismo basado en eventos mediante AWS Lambda que detecta las actualizaciones de la CRL y actualiza de forma automatizada los trust anchors desplegados en la organización.

Arquitectura de la solución

La solución se articula en cuatro dominios: el dominio de confianza, el dominio de identidad en AWS, el dominio organizativo y el dominio de consumo.

Ilustración 1. Arquitectura de la solución

Ilustración 1. Arquitectura de la solución

1. Dominio de confianza: PKI privada gobernada por el CCoE

La base del modelo es una PKI privada desplegada sobre AWS Private Certificate Authority. Esta infraestructura se organiza jerárquicamente en dos niveles:

  • Una CA raíz, utilizada exclusivamente como ancla de confianza y para firmar autoridades subordinadas.
  • Una o varias CA subordinadas, responsables de firmar los certificados de las cargas de trabajo externas.

Esta separación no es solo técnica. También refleja un reparto organizativo de responsabilidades. La CA raíz se mantiene bajo controles más estrictos y con un uso muy reducido, mientras que las CA subordinadas soportan la operativa de emisión.

Desde el punto de vista de la carga de trabajo, el flujo no implica que el CCoE genere ni transfiera claves privadas. La carga de trabajo genera localmente su clave privada y su CSR, y el CCoE (o el flujo autorizado) firma esa CSR mediante la CA subordinada correspondiente.

2. Dominio de identidad: IAM Roles Anywhere

Sobre esta base de confianza se construye el modelo de identidad en AWS mediante IAM Roles Anywhere. La integración se apoya en tres elementos.

El primero es el trust anchor, que representa la autoridad de certificación que AWS acepta como confiable. En Moeve, el trust anchor se configura usando el cuerpo del certificado de la CA raíz, que actúa como ancla última de confianza dentro de la jerarquía.

El segundo es el profile, que define qué roles pueden ser asumidos, durante cuánto tiempo y bajo qué configuración. En Moeve, los profiles solo los crea el CCoE. Esto convierte al profile en un mecanismo de control organizativo, no solo técnico.

El tercero es el rol IAM, que representa la identidad final que asumirá la carga de trabajo autenticada. El certificado no concede permisos directamente; únicamente habilita la asunción del rol.

3. Dominio organizativo: despliegue centralizado con StackSets

Un aspecto clave de la arquitectura es que el trust anchor no se despliega manualmente cuenta a cuenta. Desde el CCoE se despliega mediante un StackSet organizativo, lo que permite publicar el recurso en toda la organización y exponer de forma uniforme el export TrustAnchorArn-PKI.

Este patrón aporta consistencia entre cuentas, control centralizado del trust anchor y simplificación en el despliegue de roles y profiles en cuentas consumidoras.

4. Dominio de consumo: cargas de trabajo externas

Las cargas de trabajo externas necesitan disponer de:

  • Un certificado X.509 firmado por la CA subordinada.
  • Su clave privada local, generada y custodiada por ellas mismas.
  • La cadena de certificación correspondiente.
  • Un mecanismo de integración con IAM Roles Anywhere, típicamente aws_signing_helper.

El flujo consiste en presentar el certificado a IAM Roles Anywhere, que valida la cadena de confianza frente al trust anchor configurado. Si la validación es correcta y el profile asociado lo permite, AWS emite credenciales temporales mediante AWS Security Token Service (AWS STS) para el rol IAM autorizado.

Despliegue de la solución

Una vez definida la arquitectura, el despliegue se aborda como la construcción progresiva de la cadena de confianza y su integración con IAM Roles Anywhere.

Ilustración 2. Diagrama de la PKI

Ilustración 2. Diagrama de la PKI

1. Creación de la CA raíz

El primer paso es la creación de la CA raíz en AWS Private CA. Su finalidad es actuar como raíz de confianza y firmar las CA subordinadas. No se utiliza para emitir certificados de cargas de trabajo.

2. Creación y firma de la CA subordinada

Una vez creada la raíz, se despliega una CA subordinada y se firma con la CA raíz. A partir de ese momento, la cadena de confianza queda establecida y puede utilizarse para emitir certificados operativos.

3. Configuración de revocación y CRL

Como parte del despliegue de la PKI, se define también la configuración de revocación. En la solución de Moeve, la CRL se publica sobre S3 y puede exponerse mediante CloudFront para facilitar su consumo. Este punto es esencial porque el valor de la confianza no depende solo de emitir certificados, sino también de poder invalidarlos de forma controlada cuando sea necesario.

Sin embargo, es importante tener en cuenta que actualmente IAM Roles Anywhere no actualiza automáticamente las CRL una vez configurado el trust anchor. Esto implica que la revocación de un certificado en la PKI no se refleja de forma automática en los trust anchors existentes. Para resolver esta limitación, el CCoE ha implementado un mecanismo basado en eventos mediante el cual cada actualización de la CRL desencadena la ejecución de una función de Lambda centralizada. Esta función recorre la organización y actualiza los trust anchors desplegados mediante StackSets, asegurando que el estado de confianza en AWS se mantiene alineado con la PKI.

4. Firma de la CSR de las cargas de trabajo

Cuando una carga de trabajo necesita acceder a AWS a través de IAM Roles Anywhere, genera localmente su clave privada y construye una CSR (Certificate Signing Request). Esta solicitud es posteriormente validada y firmada por la CA subordinada conforme a las políticas definidas por el CCoE. Este modelo evita que el equipo central tenga acceso a claves privadas o que tenga que intercambiarlas con los equipos consumidores.

Este punto es especialmente relevante desde la perspectiva de seguridad: el certificado se emite centralmente, pero la clave privada permanece siempre bajo custodia de la carga de trabajo. De esta forma, la confianza se centraliza en la PKI gestionada por el CCoE sin comprometer la custodia de los materiales criptográficos utilizados por los consumidores.

El proceso completo se resume en los siguientes pasos:

  1. La carga de trabajo genera localmente su clave privada.
  2. La carga de trabajo genera una CSR que identifica la identidad que posteriormente utilizará IAM Roles Anywhere.
  3. La CSR se remite al CCoE para su validación y aprobación.
  4. La CA subordinada firma la CSR mediante AWS Private CA.
  5. Se entrega a la carga de trabajo el certificado X.509 emitido junto con la cadena de certificación.
  6. La carga de trabajo utiliza el certificado y su clave privada para autenticarse mediante IAM Roles Anywhere.

Por ejemplo, desde el lado de la carga de trabajo:

# Generar clave privada

openssl genrsa -out workload.key 2048

# Generar CSR con el Common Name que posteriormente se utilizará en IAM Roles Anywhere

openssl req -new \

  -key workload.key \

  -out workload.csr \

  -subj "/CN=mi-carga-de-trabajo"

Posteriormente, desde el CCoE, la CSR puede firmarse utilizando AWS Private CA:

# Emitir certificado mediante AWS Private CA

aws acm-pca issue-certificate \

  --certificate-authority-arn arn:aws:acm-pca:eu-west-1:123456789012:certificate-authority/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \

  --csr fileb://workload.csr \

  --signing-algorithm SHA256WITHRSA \

  --validity Value=365,Type=DAYS

Tras la emisión, la carga de trabajo recibe el certificado firmado y la cadena de certificación correspondiente, manteniendo en todo momento la clave privada bajo su control. Este certificado será posteriormente utilizado por IAM Roles Anywhere para autenticar la identidad de la carga de trabajo y permitir la obtención de credenciales temporales de AWS.

5. Despliegue del trust anchor en toda la organización

Con la PKI ya operativa, el siguiente paso es integrar esta infraestructura de confianza con IAM Roles Anywhere. En Moeve, el CCoE despliega el trust anchor en toda la organización mediante el StackSet platform-child-trusted-anchor-pki. Este despliegue permite disponer del export TrustAnchorArn-PKI en todas las cuentas, facilitando que las plantillas de CloudFormation consumidoras puedan importar ese valor y reutilizarlo de forma consistente.

Además, este enfoque reduce el riesgo de que cada cuenta cree o configure sus propios trust anchors de forma independiente.

6. Creación de roles y profiles para el acceso externo

Una vez disponible el trust anchor, cada caso de uso se habilita mediante una plantilla de CloudFormation que crea el rol IAM y el profile de IAM Roles Anywhere.

En esta plantilla, el trust anchor se importa mediante el export organizativo y el rol define la política de confianza contra el servicio rolesanywhere.amazonaws.com, restringiendo además el acceso mediante atributos del certificado, como el Common Name (CN).

La siguiente plantilla de CloudFormation despliega los componentes necesarios para habilitar el acceso de una carga de trabajo externa mediante IAM Roles Anywhere. En primer lugar, crea una política gestionada con permisos sobre un bucket de S3. A continuación, crea un rol IAM cuya política de confianza permite exclusivamente su asunción por parte del servicio IAM Roles Anywhere, restringiendo además el acceso a certificados X.509 con un Common Name específico y procedentes de un trust anchor determinado. Finalmente, crea un profile de IAM Roles Anywhere que vincula el rol autorizado, define la duración máxima de la sesión y aplica políticas adicionales de control de acceso.

El resultado es un modelo donde los permisos efectivos quedan determinados por la intersección entre los permisos concedidos al rol IAM y las restricciones definidas en el profile de IAM Roles Anywhere, proporcionando una capa adicional de gobierno sobre el acceso externo.

AWSTemplateFormatVersion: '2010-09-09'
Description: >
  IAM Roles Anywhere - Usa Trust Anchor importado via Export,
  crea Role y Profile con CN en confianza
Parameters:
  ProjectName:
    Type: String
    Default: roles-anywhere-demo
  RoleName:
    Type: String
    Default: RolesAnywhereReadOnlyRole
  ProfileName:
    Type: String
    Default: RolesAnywhereReadOnlyProfile
  AllowedCommonName:
    Type: String
    Description: CN exacto del certificado X.509 que podra asumir el rol
    Default: TuCN
  SessionDurationSeconds:
    Type: Number
    Default: 28800
    MinValue: 900
    MaxValue: 43200
  TrustAnchorExportName:
    Type: String
    Description: Nombre del Export que publica el TrustAnchorArn
    Default: TrustAnchorArn-PKI
Resources:
  S3BucketAccessPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName: !Sub "${ProjectName}-s3-bucket-access"
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Sid: BucketLevel
            Effect: Allow
            Action:
              - s3:ListBucket
              - s3:GetBucketLocation
              - s3:ListBucketMultipartUploads
            Resource: "arn:aws:s3:::s3-bucket-access"
          - Sid: ObjectLevel
            Effect: Allow
            Action:
              - s3:GetObject
              - s3:GetObjectAcl
              - s3:GetObjectTagging
              - s3:PutObject
              - s3:PutObjectAcl
              - s3:PutObjectTagging
              - s3:DeleteObject
              - s3:AbortMultipartUpload
              - s3:ListMultipartUploadParts
            Resource: "arn:aws:s3:::s3-bucket-access/*"
  RolesAnywhereRole:
    Type: AWS::IAM::Role
    DependsOn:
      - S3BucketAccessPolicy
    Properties:
      RoleName: !Ref RoleName
      MaxSessionDuration: 28800
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: rolesanywhere.amazonaws.com
            Action:
              - sts:AssumeRole
              - sts:TagSession
              - sts:SetSourceIdentity
            Condition:
              StringEquals:
                aws:PrincipalTag/x509Subject/CN: !Ref AllowedCommonName
              ArnEquals:
                aws:SourceArn:
                  Fn::ImportValue: !Ref TrustAnchorExportName
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/ReadOnlyAccess
        - !Ref S3BucketAccessPolicy
  Profile:
    Type: AWS::RolesAnywhere::Profile
    DependsOn:
      - RolesAnywhereRole
      - S3BucketAccessPolicy
    Properties:
      Name: !Ref ProfileName
      Enabled: true
      DurationSeconds: !Ref SessionDurationSeconds
      RoleArns:
        - !GetAtt RolesAnywhereRole.Arn
      AcceptRoleSessionName: true
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/ReadOnlyAccess
        - !Ref S3BucketAccessPolicy

En este diseño conviene destacar dos consideraciones:

La primera es que las políticas que se asignan al rol IAM y al profile deben definirse cuidadosamente, ya que el profile actúa como una capa adicional de control sobre los permisos efectivos que podrán obtenerse a través de IAM Roles Anywhere.

La segunda es que el servicio es regional, por lo que los trust anchors, los profiles y las llamadas del helper deben estar alineados con la región donde se ha desplegado la configuración.

Uso de IAM Roles Anywhere en Windows

Desde el punto de vista de la carga de trabajo, el consumo del servicio puede estandarizarse mediante aws_signing_helper.

Requisitos previos en Windows

Es necesario disponer de:

  • El certificado instalado en el almacén Personal (MY) del usuario actual.
  • Un trust anchor.
  • Un Amazon Resource Name (ARN) de profile.
  • Un ARN de rol.
  • El binario exe.

Selección del certificado por CN

Para verificar que el certificado está disponible en el almacén:

aws_signing_helper.exe read-certificate-data \
  --cert-selector "Key=x509Subject,Value=CN=TuNombre"

Para obtener credenciales temporales:

aws_signing_helper.exe credential-process ^
  --cert-selector "Key=x509Subject,Value=CN=TuNombre" ^
  --role-arn arn:aws:iam::123456789012:role/TuRol ^
  --trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/TuAnchor ^
  --profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/TuProfile ^
  --session-duration 28800

Este comando usa el certificado desde el almacén del usuario, firma la solicitud con la clave privada asociada y devuelve credenciales temporales en formato JSON compatible con credential_process.

Por defecto, el helper busca certificados en el almacén MY del usuario actual. Si el certificado se encuentra en otro almacén, puede indicarse explícitamente mediante --system-store-name. Es importante tener en cuenta que el asistente no accede a los certificados del equipo, sino a los del usuario. Por ejemplo:

aws_signing_helper.exe credential-process ^
  --cert-selector "Key=x509Subject,Value=CN=TuNombre" ^
  --system-store-name "TrustedPeople" ^
  --role-arn arn:aws:iam::123456789012:role/TuRol ^
  --trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/TuAnchor ^
  --profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/TuProfile ^
  --session-duration 28800

Selección del certificado por número de serie

Para identificar el número de serie del certificado:

certutil -user -store My

Para validar el certificado concreto:

aws_signing_helper.exe read-certificate-data \
  --cert-selector Key=x509Serial,Value=a2a2fd1383732024ccffc94bd66db3f7

Y para solicitar credenciales temporales:

aws_signing_helper.exe credential-process ^
  --cert-selector Key=x509Serial,Value=a2a2fd1383732024ccffc94bd66db3f7 ^
  --role-arn arn:aws:iam::123456789012:role/TuRol ^
  --trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/TuAnchor ^
  --profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/TuProfile ^
  --session-duration 28800

Integración con la AWS CLI en Windows

La forma más práctica de integrar IAM Roles Anywhere con la interfaz de línea de comandos de AWS, AWS Command Line Interface (CLI), y los kits de desarrollo de software, AWS Software Development Kit (SDK), es mediante credential_process en ~/.aws/config:

[profile rolesanywhere]
credential_process = "C:\\ruta\\aws_signing_helper.exe credential-process --cert-selector \"Key=x509Subject,Value=CN=TuNombre\" --role-arn arn:aws:iam::123456789012:role/TuRol --trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/TuAnchor --profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/TuProfile"

Validación:

aws sts get-caller-identity --profile rolesanywhere

Uso de IAM Roles Anywhere en Linux

En Linux, el patrón es equivalente, aunque normalmente se trabaja con ficheros PEM.

Detectar la arquitectura

uname -m
  • x86_64 usa el binario X86_64.
  • aarch64 usa el binario Aarch64.

Descargar el helper

Para x86_64 (conviene revisar cuál es la última versión disponible del helper):

sudo rm -f /usr/local/bin/aws_signing_helper
curl -fL --retry 3 -o aws_signing_helper \
  https://rolesanywhere.amazonaws.com/releases/1.7.0/X86_64/Linux/aws_signing_helper
chmod +x aws_signing_helper
sudo mv aws_signing_helper /usr/local/bin/

Para aarch64 (conviene revisar cuál es la última versión disponible del helper):

sudo rm -f /usr/local/bin/aws_signing_helper
curl -fL --retry 3 -o aws_signing_helper \
  https://rolesanywhere.amazonaws.com/releases/1.7.0/Aarch64/Linux/aws_signing_helper
chmod +x aws_signing_helper
sudo mv aws_signing_helper /usr/local/bin/

Obtener credenciales temporales

aws_signing_helper credential-process \
  --certificate cert.pem \
  --private-key key.pem \
  --intermediates chain.pem \
  --role-arn arn:aws:iam::123456789012:role/TuRol \
  --trust-anchor-arn arn:aws:rolesanywhere:eu-west-1:123456789012:trust-anchor/TuAnchor \
  --profile-arn arn:aws:rolesanywhere:eu-west-1:123456789012:profile/TuProfile \
  --region eu-west-1 \
  --session-duration 28800

En este flujo, la carga de trabajo presenta su certificado, su clave privada local, la cadena de certificación intermedia y los ARN del rol, el trust anchor y el profile. Si la validación es correcta, IAM Roles Anywhere devuelve credenciales temporales.

Integración con la AWS CLI en Linux

En ~/.aws/config:

[profile rolesanywhere]
credential_process = /usr/local/bin/aws_signing_helper credential-process \
  --certificate cert.pem \
  --private-key key.pem \
  --intermediates chain.pem \
  --role-arn arn:aws:iam::123456789012:role/TuRol \
  --trust-anchor-arn arn:aws:rolesanywhere:eu-west-1:123456789012:trust-anchor/TuAnchor \
  --profile-arn arn:aws:rolesanywhere:eu-west-1:123456789012:profile/TuProfile \
  --region eu-west-1 \
  --session-duration 28800

Validación:

aws sts get-caller-identity --profile rolesanywhere

Operación y gobernanza de la solución

Una vez desplegada, la operación se centra en mantener el control sobre la confianza.

El primer aspecto es el ciclo de vida del certificado. La emisión, renovación, expiración y revocación deben formar parte del diseño desde el inicio. No se trata únicamente de emitir certificados válidos, sino de mantener trazabilidad sobre a qué carga de trabajo pertenecen, bajo qué condiciones fueron emitidos y cuándo deben dejar de ser aceptados.

El segundo aspecto es la revocación. En un modelo basado en certificados, la capacidad de invalidar rápidamente una identidad es crítica. La CRL publicada por la PKI permite responder ante incidentes como la exposición de una clave privada, la retirada de una carga de trabajo o un cambio de contexto de seguridad.

El tercer aspecto es la gobernanza del acceso externo. El hecho de que solo el CCoE despliegue el trust anchor organizativo y cree los profiles garantiza que el acceso desde fuera de AWS no se habilita de forma descentralizada. Este control es clave para mantener coherencia entre cuentas y evitar multiplicar puntos de entrada externos no gobernados.

Por último, la solución preserva el modelo IAM existente. Los permisos siguen estando definidos en los roles y políticas IAM, lo que permite aplicar el principio de mínimo privilegio, la segmentación por cuentas y el resto de controles organizativos ya establecidos.

Limpieza de recursos

Si has desplegado esta solución con fines de prueba, elimina los recursos creados para evitar costes recurrentes, especialmente los asociados a AWS Private Certificate Authority. Se recomienda seguir este orden:

  • Elimina los profiles y roles IAM creados para cada caso de uso (por ejemplo, borrando los stacks de AWS CloudFormation correspondientes).
  • Elimina el StackSet que publica el trust anchor organizativo y sus instancias de pila en las cuentas miembro.
  • Revoca y elimina los certificados emitidos que ya no se necesiten y actualiza la CRL correspondiente.
  • Deshabilita y elimina las CA subordinadas y, por último, la CA raíz en AWS Private CA.
  • Vacía y elimina el bucket de S3 que aloja la CRL y, si procede, la distribución de CloudFront asociada.

Ten en cuenta que la eliminación de una CA en AWS Private CA está sujeta a un periodo de restauración configurable de 7 a 30 días (30 por defecto), planifícalo según tus necesidades.

Conclusiones

La combinación de una PKI privada con AWS IAM Roles Anywhere permite extender el modelo de identidad de Moeve más allá del perímetro nativo de AWS sin romper la gobernanza existente.

El valor de la solución no reside únicamente en habilitar acceso técnico desde cargas de trabajo externas, sino en introducir un modelo de confianza más sólido y gobernado. La identidad de la carga de trabajo pasa a estar vinculada a un certificado emitido bajo una jerarquía PKI controlada por el CCoE, mientras que la autorización sigue resolviéndose mediante roles IAM y políticas de mínimo privilegio.

Desde el punto de vista operativo, el modelo también refuerza la postura de seguridad. La autenticación pasa a basarse en criptografía en lugar de en secretos compartidos, las credenciales emitidas por AWS son temporales, la revocación puede integrarse en la operación diaria mediante CRL y cada acceso queda alineado con el modelo IAM ya existente. Esto evita crear un sistema paralelo de autorización y permite que la adopción de IAM Roles Anywhere encaje dentro del marco general de gobierno cloud de la organización.

La adopción de este patrón también ha aportado beneficios operacionales tangibles. La PKI corporativa utilizada como base de la solución permite gestionar de forma centralizada cientos de identidades de carga de trabajo mediante certificados X.509, proporcionando un modelo común de confianza, trazabilidad y revocación para escenarios machine-to-machine.

Además, la implantación de IAM Roles Anywhere ha permitido reducir significativamente la necesidad de utilizar credenciales programáticas persistentes en aquellos escenarios donde este modelo resulta aplicable. Este enfoque se ha convertido en el patrón recomendado para nuevas integraciones machine-to-machine, permitiendo avanzar progresivamente hacia un modelo basado en certificados X.509 y credenciales temporales emitidas bajo demanda, reduciendo la dependencia de Access Keys de larga duración y reforzando la seguridad mediante una confianza basada en criptografía.

Este enfoque representa una evolución natural respecto a modelos basados en credenciales programáticas. Cuando el caso de uso lo permite, IAM Roles Anywhere elimina la necesidad de distribuir y custodiar credenciales persistentes, reforzando la seguridad y simplificando su gobierno. Para aquellos escenarios donde siguen siendo necesarias credenciales programáticas, Moeve dispone de mecanismos específicos de gestión y control descritos en el blog Gestión automática y segura de Access Keys a escala en AWS.

Si tienes preguntas o comentarios sobre esta solución, no dudes en dejar un comentario en este blog.

Autores

Rayco Martínez es Head of Cloud Governance / Cloud CoE en Moeve. Rayco es un arquitecto Cloud con más de 20 años de experiencia en la industria energética, especializado en gobernanza cloud, cumplimiento normativo y transformación digital. Su pasión reside en diseñar e implementar soluciones cloud escalables, seguras y eficientes que impulsen la innovación empresarial.
Jesús Monda es Platform Engineer y parte del Cloud CoE en Moeve. Jesús es ingeniero informático por la Universidad de Sevilla (US), especializado en el diseño, construcción y operación de infraestructuras escalables, seguras y eficientes sobre AWS. Desde el equipo del Cloud CoE contribuye a la definición de buenas prácticas, automatización y modelos de gobierno que impulsan una adopción cloud segura y estandarizada en la organización.

Ignacio Rodríguez García es Technical Account Manager en AWS. En su rol, Ignacio proporciona orientación técnica estratégica para ayudar a los clientes a planificar y construir soluciones utilizando las prácticas recomendadas de AWS. Posee un máster en Ingeniería por Télécom Paris y un título de Ingeniero de Telecomunicaciones por la Universidad Politécnica de Madrid (UPM).