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
-
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:
-
Añada inicio de sesión con Facebook a su aplicación o sitio web
en el sitio de desarrolladores de Facebook. -
Uso de OAuth 2.0 para iniciar sesión (OpenID Connect)
en el sitio de desarrolladores de Google.
-
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 siguiente paso.
-
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ónsts:AssumeRoleWithWebIdentity
. -
En el elemento
Principal
, utilice la cadena{"Federated":
.providerUrl/providerArn
}-
En el caso de algunos IdP de OIDC conocidos, el
es una URL. En los siguientes ejemplos se incluyen métodos que permiten especificar la entidad principal para algunos de estos proveedores de identidad:providerUrl
"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 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ónStringEquals
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ónaud
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 siguientes ejemplos, 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 Inicio de sesión con Amazon, se aplicará el siguiente ejemplo 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 siguiente ejemplo 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 siguiente ejemplo 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 siguiente ejemplo 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 Crear 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
Inicie sesión en la AWS Management Console y abra la consola de IAM en https://console.aws.amazon.com/iam/
. -
En el panel de navegación, seleccione Roles y, a continuación, seleccione Crear rol.
-
Elija Identidad web como tipo de entidad de confianza y seleccione Siguiente.
-
En Proveedor de identidad, elija el IdP para el rol:
-
Si está creando un rol para un IdP web individual, elija Inicio de sesión 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 proveedor de 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. -
Si quiere crear un rol para HashiCorp Cloud Platform (HCP) Terraform, primero debe añadir el proveedor de OIDC de Terraform a IAM. Después de añadir el proveedor de OIDC de Terraform a IAM, elija app.terraform.io.
importante
Los roles de IAM para el proveedor de OIDC de HashiCorp Cloud Platform (HCP) Terraform debe evaluar la clave de condición de IAM,
app.terraform.io:sub
, en la política de confianza de funciones. Esta clave de condición limita los roles que las organizaciones, los proyectos, los espacios de trabajo o las fases de ejecución de Terraform de HCP pueden asumir. Sin esta clave de condición, su política de confianza permite que personas ajenas a la organización accedan a su rol y a sus recursos de AWS, lo que no se ajusta al principio del privilegio mínimo.Si establece o modifica una política de confianza de roles para un rol asociado al proveedor de OIDC de HCP Terraform en su cuenta de AWS, pero no evalúa la clave de condición de IAM
app.terraform.io:sub
, recibirá un error. Además, AWS STS denegará las solicitudes de autorización si su política de confianza de roles no evalúa esta clave de condición.
-
-
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 Inicio de sesión 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 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 la 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 (
*
).
-
-
Si quiere crear un rol para HashiCorp Cloud Platform (HCP) Terraform, introduzca los siguientes detalles:
-
En Público, elija
aws.workload.identity
. -
En Organización, introduzca el nombre de la organización. Puede especificar un carácter comodín (
*
) para todas las organizaciones. -
En Proyecto, introduzca el nombre del proyecto. Puede especificar un carácter comodín (
*
) para todos los proyectos. -
En Espacio de trabajo, introduzca un nombre del espacio de trabajo. Puede especificar un carácter comodín (
*
) para todos los espacios de trabajo. -
En Fase de ejecución, introduzca el nombre de la fase de ejecución. Puede especificar un carácter comodín (
*
) para todas las fases de ejecución.
-
-
-
(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 Actualizar una política de confianza de rol .
-
Revise la información de OIDC y, a continuación, seleccione Siguiente.
-
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.
-
(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.
-
Elija Siguiente.
-
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
comoprodrole
. 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. -
(Opcional) En Descripción, ingrese una descripción para el nuevo rol.
-
Para editar los casos de uso y los permisos del rol, elija Editar en las secciones (Paso 1: seleccionar entidades de confianza) o (Paso 2: agregar permisos).
-
(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 Etiquetas para recursos de AWS Identity and Access Management.
-
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
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.
En el siguiente ejemplo de política de confianza se 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.