Creación de un rol para una federación de OpenID Connect (consola) - AWS Identity and Access Management

Creación de un rol para una federación de OpenID Connect (consola)

Puede utilizar proveedores de identidad federados de OpenID Connect (OIDC) en lugar de crear usuarios de AWS Identity and Access Management en la Cuenta de AWS. Con un proveedor de identidad (IdP), puede administrar las identidades de usuario fuera de AWS y conceder permisos a estas identidades de usuarios externos para que tengan acceso a los recursos de AWS de su cuenta. Para obtener más información acerca de la federación y los IdP, consulte Federación y proveedores de identidades.

Requisitos previos para crear un rol para OIDC

Para poder crear un rol para federación de OIDC, antes debe completar los siguientes pasos de los requisitos previos.

Preparativos para crear un rol para la federación de OIDC
  1. Regístrese con uno o más servicios que ofrezcan identidad de OIDC federada. Si está creando una aplicación que necesita obtener acceso a los recursos de AWS, también deberá configurarla con la información del proveedor. Cuando lo haga, el proveedor le proporcionará un ID de aplicación o de público exclusivo de la aplicación. (Cada proveedor utiliza una terminología diferente para este proceso. En esta guía se utiliza el término configurar para el proceso de identificación de su aplicación con el proveedor). Puede configurar varias aplicaciones con cada proveedor o varios proveedores con una sola aplicación. Consulte la información sobre el uso de los proveedores de identidades de la siguiente manera:

  2. Después de recibir la información necesaria del IdP, cree un IdP en IAM. Para obtener más información, consulte Crear un proveedor de identidad de IAM OpenID Connect (OIDC).

    importante

    Si utiliza un IdP de OIDC de Google, Facebook o Amazon Cognito, no cree un IdP de IAM independiente en el AWS Management Console. Estos proveedores de identidades de OIDC ya están integrados en AWS y están disponibles para su uso. Omita este paso y cree nuevos roles con su IdP en el paso siguiente.

  3. Prepare las políticas para el rol que asumirán los usuarios autenticados mediante el proveedor de identidades. Como sucede con cualquier otro rol, un rol para una aplicación móvil incluye dos políticas. Una es la política de confianza que especifica quién puede asumir el rol. La otra es la política de permisos que especifica las acciones y los recursos de AWS a los que la aplicación móvil puede obtener acceso o se le deniega.

    En el caso de IdP web, le recomendamos utilizar Amazon Cognito para administrar las identidades. En este caso, utilice una política de confianza similar a la de este ejemplo.

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Federated": "cognito-identity.amazonaws.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east-2:12345678-abcd-abcd-abcd-123456"}, "ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "unauthenticated"} } } }

    Reemplace us-east-2:12345678-abcd-abcd-abcd-123456 por el ID del grupo de identidades que Amazon Cognito le ha asignado.

    Si configura de manera manual un proveedor de identidad OIDC (IdP), al crear la política de confianza debe utilizar tres valores que garanticen que únicamente su aplicación puede asumir el rol:

    • En el elemento Action, utilice la acción sts:AssumeRoleWithWebIdentity.

    • En el elemento Principal, utilice la cadena {"Federated":providerUrl/providerArn}.

      • En el caso de algunos IdP de OIDC conocidos, el providerUrl es una URL. En los siguientes ejemplos se incluyen métodos que permiten especificar la entidad principal para algunos de estos proveedores de identidad:

        "Principal":{"Federated":"cognito-identity.amazonaws.com"}

        "Principal":{"Federated":"www.amazon.com"}

        "Principal":{"Federated":"graph.facebook.com"}

        "Principal":{"Federated":"accounts.google.com"}

      • Para los demás proveedores de OIDC, utilice el nombre de recurso de Amazon (ARN) del proveedor de identidades de OIDC que ha creado en el Paso 2, como se muestra en el siguiente ejemplo:

        "Principal":{"Federated":"arn:aws:iam::123456789012:oidc-provider/server.example.com"}

    • En el elemento Condition, utilice una condición StringEquals para limitar los permisos. Pruebe el ID del grupo de identidades (para Amazon Cognito) o el ID de aplicación (para otros proveedores). El ID del grupo de identidades debe coincidir con el ID de la aplicación que ha recibido al configurarla con el IdP. Esta coincidencia entre los ID asegura que la solicitud provenga de su aplicación.

      nota

      Los roles de IAM para los grupos de identidades de Amazon Cognito confían en que la entidad principal cognito-identity.amazonaws.com del servicio asuma el rol. Los roles de este tipo deben contener al menos una clave de condición para limitar el número de entidades principales que pueden asumir el rol.

      Se aplican consideraciones adicionales a los grupos de identidades de Amazon Cognito que asumen roles de IAM entre cuentas. Las políticas de confianza de estos roles deben aceptar la entidad principal del servicio cognito-identity.amazonaws.com y deben contener la clave de condición aud para restringir la asunción de roles a los usuarios de los grupos de identidades previstos. Una política que confíe en los grupos de identidades de Amazon Cognito sin esta condición crea el riesgo de que un usuario de un grupo de identidades no deseado asuma el rol. Para obtener más información, consulte Políticas de confianza para roles de IAM en la autenticación básica (clásica) en la Guía para desarrolladores de Amazon Cognito.

      Cree un elemento de condición similar a uno de los ejemplos siguientes, en función del IdP que esté utilizando:

      "Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east:12345678-ffff-ffff-ffff-123456"}}

      "Condition": {"StringEquals": {"www.amazon.com:app_id": "amzn1.application-oa2-123456"}}

      "Condition": {"StringEquals": {"graph.facebook.com:app_id": "111222333444555"}}

      "Condition": {"StringEquals": {"accounts.google.com:aud": "66677788899900pro0"}}

      En el caso de los proveedores OIDC, utilice la dirección URL completa del proveedor de identidad OIDC con la clave de contexto aud, como se muestra en el siguiente ejemplo:

      "Condition": {"StringEquals": {"server.example.com:aud": "appid_from_oidc_idp"}}

    nota

    Observe que los valores de la entidad principal de la política de confianza del rol son específicos de un IdP. Un rol para OIDC puede especificar solo una entidad principal. Por lo tanto, si la aplicación móvil permite a los usuarios iniciar sesión desde varios IdP, debe crear un rol independiente para cada IdP que desee admitir. Cree políticas de confianza independientes para cada IdP.

    Si un usuario utiliza una aplicación móvil para iniciar sesión desde Regístrese con Amazon, se aplicará el ejemplo siguiente de política de confianza. En el ejemplo, amzn1.application-oa2-123456 representa el ID de la aplicación que Amazon asignó cuando configuró la aplicación con Login with Amazon.

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForLoginWithAmazon", "Effect": "Allow", "Principal": {"Federated": "www.amazon.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"www.amazon.com:app_id": "amzn1.application-oa2-123456"}} }] }

    Si un usuario utiliza una aplicación móvil para iniciar sesión desde Facebook, se aplicará el ejemplo siguiente de política de confianza. En este ejemplo, 111222333444555 representa el ID de la aplicación asignado por Facebook.

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForFacebook", "Effect": "Allow", "Principal": {"Federated": "graph.facebook.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"graph.facebook.com:app_id": "111222333444555"}} }] }

    Si un usuario utiliza una aplicación móvil para iniciar sesión desde Google, se aplicará el ejemplo siguiente de política de confianza. En este ejemplo, 666777888999000 representa el ID de la aplicación asignado por Google.

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForGoogle", "Effect": "Allow", "Principal": {"Federated": "accounts.google.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"accounts.google.com:aud": "666777888999000"}} }] }

    Si un usuario utiliza una aplicación móvil para iniciar sesión desde Amazon Cognito, se aplicará el ejemplo siguiente de política de confianza. En este ejemplo, us-east:12345678-ffff-ffff-ffff-123456 representa el ID del grupo de identidades asignado por Amazon Cognito.

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForCognito", "Effect": "Allow", "Principal": {"Federated": "cognito-identity.amazonaws.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east:12345678-ffff-ffff-ffff-123456"}} }] }

Creación de un rol para OIDC

Después de completar los requisitos previos, puede crear el rol en IAM. En el siguiente procedimiento se describe cómo crear el rol de federación de OIDC en la AWS Management Console. Para crear un rol desde la AWS CLI o la API de AWS, consulte los procedimientos en Creación de un rol para un proveedor de identidad de terceros (federación).

importante

Si utiliza Amazon Cognito, debe utilizar la consola de Amazon Cognito para configurar los roles. De lo contrario, utilice la consola de IAM para crear un rol para la federación de OIDC.

Cómo crear un rol de IAM para una federación de OIDC
  1. Inicie sesión en la AWS Management Console y abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación, seleccione Roles y, a continuación, seleccione Crear rol.

  3. Elija el tipo de rol OIDC.

  4. En Proveedor de identidad, elija el proveedor de identidades para el rol:

    • Si está creando un rol para un IdP web individual, elija Registrarse con Amazon, Facebook o Google.

      nota

      Debe crear un rol independiente para cada IdP al que desee admitir.

    • Si está creando un rol de situación avanzada para Amazon Cognito, elija Amazon Cognito.

      nota

      Solo deberá crear manualmente un rol para utilizarlo con Amazon Cognito si está trabajando en una situación avanzada. En caso contrario, Amazon Cognito puede crear roles de forma automática. Para obtener más información sobre Amazon Cognito, consulte Proveedores de identidades externos de grupos de identidad (identidades federadas) en la Guía para desarrolladores de Amazon Cognito.

    • Si quiere crear un rol para GitHub Actions, primero debe agregar el proveedor OIDC de GitHub a IAM. Después de agregar el proveedor OIDC de GitHub a IAM, elija token.actions.githubusercontent.com.

      nota

      Para obtener información acerca de cómo configurar AWS para confiar en el OIDC de GitHub como una identidad federada, consulte GitHub Docs: configuración de OpenID Connect en Amazon Web Services. Para obtener información sobre las mejores prácticas para limitar el acceso a los roles asociados al IdP de IAM para GitHub, consulte Configuración de un rol para el proveedor de identidades de OIDC de GitHub en esta página.

  5. Ingrese el identificador de su aplicación. La etiqueta del identificador cambia en función del proveedor que elija:

    • Si está creando un rol para Regstrarse con Amazon, ingrese el ID de la aplicación en el cuadro ID de aplicación.

    • Si está creando un rol para Facebook, ingrese el ID de la aplicación en el cuadro ID de aplicación.

    • Si está creando un rol para Google, ingrese el nombre de los destinatarios en el cuadro Público.

    • Si está creando un rol para Amazon Cognito, ingrese el ID del grupo de identidades que ha creado para sus aplicaciones de Amazon Cognito en el campo Identity Pool (ID de grupo de identidades).

    • Si quiere crear un rol para GitHub Actions, introduzca los siguientes detalles:

      • En Público, elija sts.amazonaws.com.

      • Para Organización de GitHub, introduzca el nombre de su organización de GitHub. El nombre de la organización de GitHub es obligatorio y debe ser alfanumérico, incluyendo guiones (-). No se pueden usar caracteres comodín (* y ?) en el nombre de la organización de GitHub.

      • (Opcional) Para el repositorio GitHub, introduzca el nombre del repositorio GitHub. Si no especifica un valor, se utilizará por defecto un comodín (*).

      • (Opcional) Para la ramificación GitHub, introduzca el nombre de la ramificación GitHub. Si no especifica un valor, se utilizará por defecto un comodín (*).

  6. (Opcional) Para Condición (opcional), elija Añadir condición para crear condiciones adicionales que deben cumplirse antes de que los usuarios de su aplicación puedan utilizar los permisos que el rol les concede. Por ejemplo, puede agregar una condición que conceda acceso a recursos de AWS únicamente a un ID de usuario de IAM concreto. También puede añadir condiciones a la política de confianza después de crear el rol. Para obtener más información, consulte Modificación de una política de confianza de rol (consola).

  7. Revise la información de OIDC y, a continuación, seleccione Siguiente.

  8. IAM incluye una lista de las políticas administradas por AWS y de las políticas administradas por el cliente en su cuenta. Seleccione la política que desea utilizar como política de permisos o elija Crear Política para abrir una pestaña nueva del navegador y crear una política nueva desde cero. Para obtener más información, consulte Crear políticas de IAM. Después de crear la política, cierre esa pestaña y vuelva a la pestaña original. Seleccione la casilla de verificación situada junto a las políticas de permisos que desea conceder a los usuarios de OIDC. Si lo prefiere, puede optar por no seleccionar ninguna política en este momento y asociar las políticas al rol más adelante. De forma predeterminada, un rol no tiene permisos.

  9. (Opcional) Configure un límite de permisos. Esta es una característica avanzada.

    Abra la sección Limites de permisos y elija Utilizar un límite de permisos para controlar los permisos que puede tener el rol como máximo). Seleccione la política que desea utilizar para el límite de permisos.

  10. Elija Siguiente.

  11. En Nombre de rol, ingrese un nombre de rol. Los nombres de rol deben ser únicos en su Cuenta de AWS. No dependen de los casos. Por ejemplo, no puede crear funciones denominadas tanto PRODROLE como prodrole. Dado que es posible que otros recursos de AWS hagan referencia al rol, no se puede editar el nombre del rol después de crearlo.

  12. (Opcional) En Descripción, ingrese una descripción para el nuevo rol.

  13. Para editar los casos de uso y los permisos de la función, elija Editar en las secciones (Paso 1: seleccionar entidades de confianza) o (Paso 2: agregar permisos).

  14. (Opcional) Para agregar metadatos al rol, asocie etiquetas como pares clave-valor. Para obtener más información acerca del uso de etiquetas en IAM, consulte Etiquetado de recursos de IAM.

  15. Revise el rol y, a continuación, seleccione Crear rol.

Configuración de un rol para el proveedor de identidades de OIDC de GitHub

Si usa GitHub como un proveedor de identidades (IdP) de OIDC, la práctica recomendada es limitar las entidades que pueden asumir el rol asociado con el IdP de IAM. Cuando incluye una declaración de condición en la política de confianza, puede limitar el rol a una organización, un repositorio o una rama de GitHub específica. Puede usar la clave de condición token.actions.githubusercontent.com:sub con operadores de condición de cadena para limitar el acceso. Recomendamos limitar la condición a un conjunto específico de repositorios o ramas dentro de la organización GitHub. Para obtener información acerca de cómo configurar AWS para confiar en el OIDC de GitHub como una identidad federada, consulte GitHub Docs: configuración de OpenID Connect en Amazon Web Services.

Si utiliza los entornos de GitHub en los flujos de trabajo de acción o en las políticas de OIDC, recomendamos agregar reglas de protección al entorno para una mayor seguridad. Utilice las ramas y las etiquetas de implementación para restringir qué ramas y etiquetas se pueden implementar en el entorno. Para más información sobre la configuración de entornos con reglas de protección, consulte Ramas y etiquetas de implementación en el artículo Uso de entornos para la implementación de GitHub.

Cuando el IdP OIDC de GitHub es la entidad principal de confianza para su rol, IAM comprueba la condición de la política de confianza del rol para verificar que la clave de condición token.actions.githubusercontent.com:sub está presente y su valor no es únicamente un carácter comodín (* y ?) o nulo. IAM realiza esta comprobación cuando se crea o actualiza la política de confianza. Si la clave de condición token.actions.githubusercontent.com:sub no está presente o el valor de la clave no cumple los criterios de valor mencionados, la solicitud fallará y devolverá un error.

importante

Si no limita la clave de condición token.actions.githubusercontent.com:sub a una organización o repositorio específicos, GitHub Actions de organizaciones o repositorios fuera de su control pueden asumir roles asociados con el IdP de IAM de GitHub en su cuenta de AWS.

El siguiente ejemplo de política de confianza limita el acceso a la organización, el repositorio y la rama de GitHub definidos. El valor de la clave de condición token.actions.githubusercontent.com:sub del siguiente ejemplo es el formato de valor del asunto predeterminado documentado por GitHub.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::012345678910:oidc-provider/token.actions.githubusercontent.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com", "token.actions.githubusercontent.com:sub": "repo:GitHubOrg/GitHubRepo:ref:refs/heads/GitHubBranch" } } } ] }

La siguiente condición de ejemplo limita el acceso a la organización y el repositorio de GitHub definidos, pero otorga acceso a cualquier rama del repositorio.

"Condition": { "StringEquals": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com" }, "StringLike": { "token.actions.githubusercontent.com:sub": "repo:GitHubOrg/GitHubRepo:*" } }

La siguiente condición de ejemplo limita el acceso a cualquier rama o repositorio de la organización de GitHub definida. Recomendamos limitar la clave de condición token.actions.githubusercontent.com:sub a un valor específico que limite el acceso a GitHub Actions desde dentro de la organización de GitHub.

"Condition": { "StringEquals": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com" }, "StringLike": { "token.actions.githubusercontent.com:sub": "repo:GitHubOrg/*" } }

Para obtener más información sobre las claves de federación de OIDC disponibles para verificaciones de condición en las políticas, consulte Claves disponibles para las federaciones de identidades AWS de OIDC.