Biblioteca cliente de autenticación de código abierto para Java.
Este proyecto consta de 3 artefactos:
Tabla de contenido:
Inicio rápido
biblioteca-de-autenticación-de-google-oauth2-http
credenciales-de-biblioteca-de-autenticación-de-google
google-auth-library-appengine
Estado del CI
Contribuyendo
Licencia
Si está utilizando Maven, agregue esto a su archivo pom.xml (tenga en cuenta que puede reemplazar google-auth-library-oauth2-http
con cualquiera de google-auth-library-credentials
y google-auth-library-appengine
, dependiendo de su aplicación necesita):
< dependency >
< groupId >com.google.auth groupId >
< artifactId >google-auth-library-oauth2-http artifactId >
< version >1.19.0 version >
dependency >
Si estás usando Gradle, agrega esto a tus dependencias.
implementation ' com.google.auth:google-auth-library-oauth2-http:1.19.0 '
Si está utilizando SBT, agregue esto a sus dependencias
libraryDependencies + = " com.google.auth " % " google-auth-library-oauth2-http " % " 1.19.0 "
Esta biblioteca proporciona una implementación de credenciales predeterminadas de aplicaciones para Java. Las credenciales predeterminadas de la aplicación proporcionan una forma sencilla de obtener credenciales de autorización para usarlas al llamar a las API de Google.
Son más adecuados para los casos en los que la llamada debe tener la misma identidad y nivel de autorización para la aplicación independientemente del usuario. Este es el enfoque recomendado para autorizar llamadas a las API de la nube, especialmente cuando estás creando una aplicación que utiliza Google Cloud Platform.
Las credenciales predeterminadas de la aplicación también admiten la federación de identidades de cargas de trabajo para acceder a los recursos de Google Cloud desde plataformas que no son de Google Cloud, incluidos Amazon Web Services (AWS), Microsoft Azure o cualquier proveedor de identidad que admita OpenID Connect (OIDC). Se recomienda la federación de identidades de cargas de trabajo para entornos que no son de Google Cloud, ya que evita la necesidad de descargar, administrar y almacenar claves privadas de cuentas de servicio localmente; consulte: Federación de identidades de cargas de trabajo.
Para obtener las credenciales predeterminadas de la aplicación, utilice GoogleCredentials.getApplicationDefault()
o GoogleCredentials.getApplicationDefault(HttpTransportFactory)
. Estos métodos devuelven las credenciales predeterminadas de la aplicación que se utilizan para identificar y autorizar toda la aplicación. Se buscan lo siguiente (en orden) para encontrar las credenciales predeterminadas de la aplicación:
GOOGLE_APPLICATION_CREDENTIALS
gcloud auth application-default login
del SDK de Google CloudNO_GCE_CHECK=true
GCE_METADATA_HOST=
Para obtener credenciales de una clave JSON de cuenta de servicio, utilice GoogleCredentials.fromStream(InputStream)
o GoogleCredentials.fromStream(InputStream, HttpTransportFactory)
. Tenga en cuenta que las credenciales deben actualizarse antes de que el token de acceso esté disponible.
GoogleCredentials credentials = GoogleCredentials . fromStream ( new FileInputStream ( "/path/to/credentials.json" ));
credentials . refreshIfExpired ();
AccessToken token = credentials . getAccessToken ();
// OR
AccessToken token = credentials . refreshAccessToken ();
Permite que las credenciales emitidas a un usuario o cuenta de servicio se hagan pasar por otra. El proyecto de origen que utiliza ImpersonatedCredentials debe habilitar la API "IAMCredentials". Además, la cuenta de servicio de destino debe otorgar a la entidad principal de origen la función de IAM de "Creador de tokens de cuenta de servicio".
String credPath = "/path/to/svc_account.json" ;
ServiceAccountCredentials sourceCredentials = ServiceAccountCredentials
. fromStream ( new FileInputStream ( credPath ));
sourceCredentials = ( ServiceAccountCredentials ) sourceCredentials
. createScoped ( Arrays . asList ( "https://www.googleapis.com/auth/iam" ));
ImpersonatedCredentials targetCredentials = ImpersonatedCredentials . create ( sourceCredentials ,
"[email protected]" , null ,
Arrays . asList ( "https://www.googleapis.com/auth/devstorage.read_only" ), 300 );
Storage storage_service = StorageOptions . newBuilder (). setProjectId ( "project-id" )
. setCredentials ( targetCredentials ). build (). getService ();
for ( Bucket b : storage_service . list (). iterateAll ())
System . out . println ( b );
Al utilizar la federación de identidades de cargas de trabajo, su aplicación puede acceder a los recursos de Google Cloud desde Amazon Web Services (AWS), Microsoft Azure o cualquier proveedor de identidades que admita OpenID Connect (OIDC).
Tradicionalmente, las aplicaciones que se ejecutan fuera de Google Cloud han utilizado claves de cuenta de servicio para acceder a los recursos de Google Cloud. Al utilizar la federación de identidades, su carga de trabajo puede suplantar una cuenta de servicio. Esto permite que la carga de trabajo externa acceda a los recursos de Google Cloud directamente, eliminando la carga de mantenimiento y seguridad asociada con las claves de la cuenta de servicio.
Para acceder a los recursos de Google Cloud desde Amazon Web Services (AWS), se necesitan los siguientes requisitos:
Siga las instrucciones detalladas sobre cómo configurar la federación de identidades de cargas de trabajo desde AWS.
Después de configurar el proveedor de AWS para que se haga pasar por una cuenta de servicio, es necesario generar un archivo de configuración de credenciales. A diferencia de los archivos de credenciales de cuentas de servicio, el archivo de configuración de credenciales generado contiene metadatos no confidenciales para indicar a la biblioteca cómo recuperar tokens de sujetos externos e intercambiarlos por tokens de acceso a cuentas de servicio. El archivo de configuración se puede generar mediante la CLI de gcloud.
Para generar la configuración de identidad de la carga de trabajo de AWS, ejecute el siguiente comando:
# Generate an AWS configuration file.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
Donde es necesario sustituir las siguientes variables:
$PROJECT_NUMBER
: el número del proyecto de Google Cloud.$POOL_ID
: ID del grupo de identidades de la carga de trabajo.$AWS_PROVIDER_ID
: el ID del proveedor de AWS.$SERVICE_ACCOUNT_EMAIL
: El correo electrónico de la cuenta de servicio que se va a suplantar.Esto genera el archivo de configuración en el archivo de salida especificado.
Si está utilizando AWS IMDSv2, se debe agregar una marca adicional --enable-imdsv2
al comando gcloud iam workload-identity-pools create-cred-config
:
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
--enable-imdsv2
Ahora puede utilizar la biblioteca de autenticación para llamar a los recursos de Google Cloud desde AWS.
Para acceder a los recursos de Google Cloud desde Microsoft Azure, se necesitan los siguientes requisitos:
Siga las instrucciones detalladas sobre cómo configurar la federación de identidades de cargas de trabajo desde Microsoft Azure.
Después de configurar el proveedor de Azure para que se haga pasar por una cuenta de servicio, es necesario generar un archivo de configuración de credenciales. A diferencia de los archivos de credenciales de cuentas de servicio, el archivo de configuración de credenciales generado contiene metadatos no confidenciales para indicar a la biblioteca cómo recuperar tokens de sujetos externos e intercambiarlos por tokens de acceso a cuentas de servicio. El archivo de configuración se puede generar mediante la CLI de gcloud.
Para generar la configuración de identidad de la carga de trabajo de Azure, ejecute el siguiente comando:
# Generate an Azure configuration file.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AZURE_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--azure
--output-file /path/to/generated/config.json
Donde es necesario sustituir las siguientes variables:
$PROJECT_NUMBER
: el número del proyecto de Google Cloud.$POOL_ID
: ID del grupo de identidades de la carga de trabajo.$AZURE_PROVIDER_ID
: el ID del proveedor de Azure.$SERVICE_ACCOUNT_EMAIL
: El correo electrónico de la cuenta de servicio que se va a suplantar.Esto genera el archivo de configuración en el archivo de salida especificado.
Ahora puede usar la biblioteca de autenticación para llamar a los recursos de Google Cloud desde Azure.
Para acceder a los recursos de Google Cloud desde un proveedor de identidad que admita OpenID Connect (OIDC), se necesitan los siguientes requisitos:
Siga las instrucciones detalladas sobre cómo configurar la federación de identidades de cargas de trabajo desde un proveedor de identidades OIDC.
Después de configurar el proveedor de OIDC para que se haga pasar por una cuenta de servicio, es necesario generar un archivo de configuración de credenciales. A diferencia de los archivos de credenciales de cuentas de servicio, el archivo de configuración de credenciales generado contiene metadatos no confidenciales para indicar a la biblioteca cómo recuperar tokens de sujetos externos e intercambiarlos por tokens de acceso a cuentas de servicio. El archivo de configuración se puede generar mediante la CLI de gcloud.
Para los proveedores de OIDC, la biblioteca de autenticación puede recuperar tokens OIDC desde una ubicación de archivo local (credenciales de origen de archivo) o de un servidor local (credenciales de origen de URL).
Credenciales obtenidas en archivos Para las credenciales obtenidas en archivos, es necesario un proceso en segundo plano que actualice continuamente la ubicación del archivo con un nuevo token OIDC antes de que caduque. Para tokens con una vida útil de una hora, el token debe actualizarse en el archivo cada hora. El token se puede almacenar directamente como texto sin formato o en formato JSON.
Para generar una configuración OIDC basada en archivos, ejecute el siguiente comando:
# Generate an OIDC configuration file for file-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $OIDC_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--credential-source-file $PATH_TO_OIDC_ID_TOKEN
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file /path/to/generated/config.json
Donde es necesario sustituir las siguientes variables:
$PROJECT_NUMBER
: el número del proyecto de Google Cloud.$POOL_ID
: ID del grupo de identidades de la carga de trabajo.$OIDC_PROVIDER_ID
: el ID del proveedor de OIDC.$SERVICE_ACCOUNT_EMAIL
: El correo electrónico de la cuenta de servicio que se va a suplantar.$PATH_TO_OIDC_ID_TOKEN
: la ruta del archivo utilizada para recuperar el token OIDC.Esto genera el archivo de configuración en el archivo de salida especificado.
Credenciales de origen URL Para las credenciales de origen URL, un servidor local debe alojar un punto final GET para devolver el token OIDC. La respuesta puede ser en texto plano o JSON. También se pueden especificar encabezados de solicitud adicionales requeridos.
Para generar una configuración de identidad de carga de trabajo OIDC con origen URL, ejecute el siguiente comando:
# Generate an OIDC configuration file for URL-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $OIDC_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--credential-source-url $URL_TO_GET_OIDC_TOKEN
--credential-source-headers $HEADER_KEY = $HEADER_VALUE
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file /path/to/generated/config.json
Donde es necesario sustituir las siguientes variables:
$PROJECT_NUMBER
: el número del proyecto de Google Cloud.$POOL_ID
: ID del grupo de identidades de la carga de trabajo.$OIDC_PROVIDER_ID
: el ID del proveedor de OIDC.$SERVICE_ACCOUNT_EMAIL
: El correo electrónico de la cuenta de servicio que se va a suplantar.$URL_TO_GET_OIDC_TOKEN
: la URL del punto final del servidor local al que llamar para recuperar el token OIDC.$HEADER_KEY
y $HEADER_VALUE
: los pares clave/valor de encabezado adicionales para pasar la solicitud GET a $URL_TO_GET_OIDC_TOKEN
, por ejemplo, Metadata-Flavor=Google
.Ahora puede utilizar la biblioteca de autenticación para llamar a recursos de Google Cloud desde un proveedor de OIDC.
Credenciales de origen ejecutable Para las credenciales de origen ejecutable, se utiliza un ejecutable local para recuperar el token de terceros. El ejecutable debe encargarse de proporcionar un token de ID OIDC válido y vigente o una aserción SAML en formato JSON para la salida estándar.
Para utilizar credenciales de origen ejecutable, la variable de entorno GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES
debe establecerse en 1
.
Para generar una configuración de identidad de carga de trabajo de origen ejecutable, ejecute el siguiente comando:
# Generate a configuration file for executable-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $PROVIDER_ID
--service-account= $SERVICE_ACCOUNT_EMAIL
--subject-token-type= $SUBJECT_TOKEN_TYPE
# The absolute path for the program, including arguments.
# e.g. --executable-command="/path/to/command --foo=bar"
--executable-command= $EXECUTABLE_COMMAND
# Optional argument for the executable timeout. Defaults to 30s.
# --executable-timeout-millis=$EXECUTABLE_TIMEOUT
# Optional argument for the absolute path to the executable output file.
# See below on how this argument impacts the library behaviour.
# --executable-output-file=$EXECUTABLE_OUTPUT_FILE
--output-file /path/to/generated/config.json
Donde es necesario sustituir las siguientes variables:
$PROJECT_NUMBER
: el número del proyecto de Google Cloud.$POOL_ID
: ID del grupo de identidades de la carga de trabajo.$PROVIDER_ID
: ID del proveedor OIDC o SAML.$SERVICE_ACCOUNT_EMAIL
: El correo electrónico de la cuenta de servicio que se va a suplantar.$SUBJECT_TOKEN_TYPE
: el tipo de token del sujeto.$EXECUTABLE_COMMAND
: El comando completo a ejecutar, incluidos los argumentos. Debe ser una ruta absoluta al programa. El indicador --executable-timeout-millis
es opcional. Este es el tiempo que la biblioteca de autenticación esperará a que finalice el ejecutable, en milisegundos. El valor predeterminado es 30 segundos cuando no se proporciona. El valor máximo permitido es de 2 minutos. El mínimo es 5 segundos.
El indicador --executable-output-file
es opcional. Si se proporciona, la ruta del archivo debe apuntar a la respuesta de credencial 3PI generada por el ejecutable. Esto es útil para almacenar en caché las credenciales. Al especificar esta ruta, las bibliotecas de autenticación primero verificarán su existencia antes de ejecutar el ejecutable. Al almacenar en caché la respuesta JSON ejecutable a este archivo, se mejora el rendimiento ya que evita la necesidad de ejecutar el ejecutable hasta que caduquen las credenciales almacenadas en caché en el archivo de salida. El ejecutable debe manejar la escritura en este archivo; las bibliotecas de autenticación solo intentarán leer desde esta ubicación. El formato del contenido del archivo debe coincidir con el formato JSON esperado por el ejecutable que se muestra a continuación.
Para recuperar el token de terceros, la biblioteca llamará al ejecutable usando el comando especificado. La salida del ejecutable debe cumplir con el formato de respuesta especificado a continuación. Debe generar la respuesta a la salida estándar.
Un ejemplo de respuesta OIDC ejecutable exitosa:
{
"version" : 1 ,
"success" : true ,
"token_type" : " urn:ietf:params:oauth:token-type:id_token " ,
"id_token" : " HEADER.PAYLOAD.SIGNATURE " ,
"expiration_time" : 1620499962
}
Un ejemplo de respuesta SAML ejecutable exitosa:
{
"version" : 1 ,
"success" : true ,
"token_type" : " urn:ietf:params:oauth:token-type:saml2 " ,
"saml_response" : " ... " ,
"expiration_time" : 1620499962
}
Un ejemplo de respuesta de error ejecutable:
{
"version" : 1 ,
"success" : false ,
"code" : " 401 " ,
"message" : " Caller not authorized. "
}
Todos estos son campos obligatorios para una respuesta de error. La biblioteca utilizará los campos de código y mensaje como parte de la excepción lanzada.
Para obtener respuestas exitosas, el campo expiration_time
solo es necesario cuando se especifica un archivo de salida en la configuración de credenciales.
Resumen de campos de formato de respuesta:
version
: la versión de la salida JSON. Actualmente solo se admite la versión 1.success
: cuando es verdadero, la respuesta debe contener el token de terceros y el tipo de token. La respuesta también debe contener el campo expiration_time si se especificó un archivo de salida en la configuración de credenciales. El ejecutable también debe salir con el código de salida 0. Cuando es falso, la respuesta debe contener el código de error y los campos de mensaje y salir con un valor distinto de cero.token_type
: el tipo de token del sujeto de terceros. Debe ser urn:ietf:params:oauth:token-type:jwt , urn:ietf:params:oauth:token-type:id_token o urn:ietf:params:oauth:token-type:saml2 .id_token
: el token OIDC de terceros.saml_response
: la respuesta SAML de terceros.expiration_time
: el tiempo de vencimiento del token sujeto de terceros en segundos (tiempo de época de Unix).code
: la cadena del código de error.message
: El mensaje de error. Todos los tipos de respuesta deben incluir los campos version
y success
.
token_type
y uno de id_token
o saml_response
. El campo expiration_time
también debe estar presente si se especificó un archivo de salida en la configuración de credenciales.code
como el message
.La biblioteca completará las siguientes variables de entorno cuando se ejecute el ejecutable:
GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE
: el campo de audiencia de la configuración de credenciales. Siempre presente.GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE
: este tipo de token de sujeto esperado. Siempre presente.GOOGLE_EXTERNAL_ACCOUNT_IMPERSONATED_EMAIL
: el correo electrónico de la cuenta de servicio. Solo está presente cuando se utiliza la suplantación de cuenta de servicio.GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE
: la ubicación del archivo de salida de la configuración de credenciales. Solo está presente cuando se especifica en la configuración de credenciales.El ejecutable puede utilizar estas variables de entorno para evitar codificar estos valores.
Se recomiendan encarecidamente las siguientes prácticas de seguridad:
Dada la complejidad del uso de credenciales de origen ejecutable, se recomienda utilizar los mecanismos admitidos existentes (de archivo/URL) para proporcionar credenciales de terceros, a menos que no cumplan con sus requisitos específicos.
Ahora puedes usar la biblioteca de autenticación para llamar a recursos de Google Cloud desde un proveedor OIDC o SAML.
Se puede utilizar una implementación personalizada de IdentityPoolSubjectTokenSupplier al crear IdentityPoolCredentials para proporcionar un token de sujeto que se puede intercambiar por un token de acceso a GCP. El proveedor debe devolver un token de asunto válido y vigente cuando lo llame la credencial de GCP.
IdentityPoolCredentials no almacena en caché el token devuelto, por lo que se debe implementar la lógica de almacenamiento en caché en el proveedor del token para evitar múltiples solicitudes para el mismo token sujeto.
import java . io . IOException ;
public class CustomTokenSupplier implements IdentityPoolSubjectTokenSupplier {
@ Override
public String getSubjectToken ( ExternalAccountSupplierContext context ) throws IOException {
// Any call to the supplier will pass a context object with the requested
// audience and subject token type.
string audience = context . getAudience ();
string tokenType = context . getSubjectTokenType ();
try {
// Return a valid, unexpired token for the requested audience and token type.
// Note that IdentityPoolCredentials do not cache the subject token so
// any caching logic needs to be implemented in the token supplier.
return retrieveToken ( audience , tokenType );
} catch ( Exception e ) {
// If token is unavailable, throw IOException.
throw new IOException ( e );
}
}
private String retrieveToken ( string tokenType , string audience ) {
// Retrieve a subject token of the requested type for the requested audience.
}
}
CustomTokenSupplier tokenSupplier = new CustomTokenSupplier ();
IdentityPoolCredentials identityPoolCredentials =
IdentityPoolCredentials . newBuilder ()
. setSubjectTokenSupplier ( tokenSupplier ) // Sets the token supplier.
. setAudience (...) // Sets the GCP audience.
. setSubjectTokenType ( SubjectTokenTypes . JWT ) // Sets the subject token type.
. build ();
Dónde está la audiencia: //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_POOL_ID/providers/$PROVIDER_ID
Donde es necesario sustituir las siguientes variables:
$PROJECT_NUMBER
: el número del proyecto de Google Cloud.$WORKLOAD_POOL_ID
: ID del grupo de identidades de carga de trabajo.$PROVIDER_ID
: El ID del proveedor.Los valores de audiencia, URL de suplantación de cuenta de servicio y cualquier otro campo del generador también se pueden encontrar generando un archivo de configuración de credenciales con la CLI de gcloud.
Se puede proporcionar una implementación personalizada de AwsSecurityCredentialsSupplier al inicializar AwsCredentials. Si se proporciona, la instancia de AwsCredentials remitirá al proveedor la recuperación de las credenciales de seguridad de AWS para intercambiarlas por un token de acceso de GCP. El proveedor debe devolver credenciales de seguridad de AWS válidas y vigentes cuando lo llame la credencial de GCP.
AwsCredentials no almacena en caché las credenciales de seguridad o la región de AWS devueltas, por lo que se debe implementar una lógica de almacenamiento en caché en el proveedor para evitar múltiples solicitudes de los mismos recursos.
class CustomAwsSupplier implements AwsSecurityCredentialsSupplier {
@ Override
AwsSecurityCredentials getAwsSecurityCredentials ( ExternalAccountSupplierContext context ) throws IOException {
// Any call to the supplier will pass a context object with the requested
// audience.
string audience = context . getAudience ();
try {
// Return valid, unexpired AWS security credentials for the requested audience.
// Note that AwsCredentials do not cache the AWS security credentials so
// any caching logic needs to be implemented in the credentials' supplier.
return retrieveAwsSecurityCredentials ( audience );
} catch ( Exception e ) {
// If credentials are unavailable, throw IOException.
throw new IOException ( e );
}
}
@ Override
String getRegion ( ExternalAccountSupplierContext context ) throws IOException {
try {
// Return a valid AWS region. i.e. "us-east-2".
// Note that AwsCredentials do not cache the region so
// any caching logic needs to be implemented in the credentials' supplier.
return retrieveAwsRegion ();
} catch ( Exception e ) {
// If region is unavailable, throw IOException.
throw new IOException ( e );
}
}
private AwsSecurityCredentials retrieveAwsSecurityCredentials ( string audience ) {
// Retrieve Aws security credentials for the requested audience.
}
private String retrieveAwsRegion () {
// Retrieve current AWS region.
}
}
CustomAwsSupplier awsSupplier = new CustomAwsSupplier ();
AwsCredentials credentials = AwsCredentials . newBuilder ()
. setSubjectTokenType ( SubjectTokenTypes . AWS4 ) // Sets the subject token type.
. setAudience (...) // Sets the GCP audience.
. setAwsSecurityCredentialsSupplier ( supplier ) // Sets the supplier.
. build ();
Dónde está la audiencia: //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_POOL_ID/providers/$PROVIDER_ID
Donde es necesario sustituir las siguientes variables:
$PROJECT_NUMBER
: el número del proyecto de Google Cloud.$WORKLOAD_POOL_ID
: ID del grupo de identidades de carga de trabajo.$PROVIDER_ID
: El ID del proveedor.Los valores de audiencia, URL de suplantación de cuenta de servicio y cualquier otro campo del generador también se pueden encontrar generando un archivo de configuración de credenciales con la CLI de gcloud.
Al crear una configuración de credenciales con la federación de identidades de carga de trabajo mediante la suplantación de cuenta de servicio, puede proporcionar un argumento opcional para configurar la duración del token de acceso de la cuenta de servicio.
Para generar la configuración con una duración del token configurable, ejecute el siguiente comando (este ejemplo utiliza una configuración de AWS, pero la duración del token se puede configurar para todos los proveedores de federación de identidades de carga de trabajo):
# Generate an AWS configuration file with configurable token lifetime.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
--service-account-token-lifetime-seconds $TOKEN_LIFETIME
Donde es necesario sustituir las siguientes variables:
$PROJECT_NUMBER
: el número del proyecto de Google Cloud.$POOL_ID
: ID del grupo de identidades de la carga de trabajo.$AWS_PROVIDER_ID
: el ID del proveedor de AWS.$SERVICE_ACCOUNT_EMAIL
: El correo electrónico de la cuenta de servicio que se va a suplantar.$TOKEN_LIFETIME
: la duración deseada del token de acceso a la cuenta de servicio en segundos. El indicador service-account-token-lifetime-seconds
es opcional. Si no se proporciona, el valor predeterminado es una hora. El valor mínimo permitido es 600 (10 minutos) y el valor máximo permitido es 43200 (12 horas). Si se requiere una vida útil superior a una hora, la cuenta de servicio se debe agregar como un valor permitido en una política de organización que aplique la restricción constraints/iam.allowServiceAccountCredentialLifetimeExtension
.
Tenga en cuenta que configurar una vida útil corta (por ejemplo, 10 minutos) hará que la biblioteca inicie todo el flujo de intercambio de tokens cada 10 minutos, lo que llamará al proveedor de tokens de terceros incluso si el token de terceros no ha caducado.
La federación de identidades de la fuerza laboral le permite utilizar un proveedor de identidad externo (IdP) para autenticar y autorizar una fuerza laboral (un grupo de usuarios, como empleados, socios y contratistas) mediante IAM, para que los usuarios puedan acceder a los servicios de Google Cloud. La federación de identidades de Workforce amplía las capacidades de identidad de Google Cloud para admitir el inicio de sesión único sin sincronización y basado en atributos.
Con la federación de identidades de la fuerza laboral, su fuerza laboral puede acceder a los recursos de Google Cloud mediante un proveedor de identidad externo (IdP) que admita OpenID Connect (OIDC) o SAML 2.0, como Azure Active Directory (Azure AD), Active Directory Federation Services (AD FS), Okta. y otros.
Para acceder a los recursos de Google Cloud desde un proveedor de identidad que admita OpenID Connect (OIDC), se necesitan los siguientes requisitos:
Siga las instrucciones detalladas sobre cómo configurar la federación de identidades de la fuerza laboral.
Después de configurar un proveedor OIDC o SAML 2.0, es necesario generar un archivo de configuración de credenciales. El archivo de configuración de credenciales generado contiene metadatos no confidenciales para indicar a la biblioteca cómo recuperar tokens de sujeto externos e intercambiarlos por tokens de acceso de GCP. El archivo de configuración se puede generar mediante la CLI de gcloud.
La biblioteca de autenticación puede recuperar tokens de sujeto externos desde una ubicación de archivo local (credenciales de origen de archivo), de un servidor local (credenciales de origen URL) o llamando a un ejecutable (credenciales de origen ejecutable).
Credenciales obtenidas en archivos Para las credenciales obtenidas en archivos, es necesario un proceso en segundo plano que actualice continuamente la ubicación del archivo con un nuevo token de asunto antes de que caduque. Para tokens con una vida útil de una hora, el token debe actualizarse en el archivo cada hora. El token se puede almacenar directamente como texto sin formato o en formato JSON.
Para generar una configuración OIDC basada en archivos, ejecute el siguiente comando:
# Generate an OIDC configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:id_token
--credential-source-file= $PATH_TO_OIDC_ID_TOKEN
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file=/path/to/generated/config.json
Donde es necesario sustituir las siguientes variables:
$WORKFORCE_POOL_ID
: ID del grupo de fuerza laboral.$PROVIDER_ID
: El ID del proveedor.$PATH_TO_OIDC_ID_TOKEN
: la ruta del archivo utilizada para recuperar el token OIDC.$WORKFORCE_POOL_USER_PROJECT
: el número de proyecto asociado con el proyecto de usuario de los grupos de fuerza laboral.Para generar una configuración SAML basada en archivos, ejecute el siguiente comando:
# Generate a SAML configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--credential-source-file= $PATH_TO_SAML_ASSERTION
--subject-token-type=urn:ietf:params:oauth:token-type:saml2
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
--output-file=/path/to/generated/config.json
Donde es necesario sustituir las siguientes variables:
$WORKFORCE_POOL_ID
: ID del grupo de fuerza laboral.$PROVIDER_ID
: El ID del proveedor.$PATH_TO_SAML_ASSERTION
: la ruta del archivo utilizada para recuperar la aserción SAML codificada en base64.$WORKFORCE_POOL_USER_PROJECT
: el número de proyecto asociado con el proyecto de usuario de los grupos de fuerza laboral.Estos comandos generan el archivo de configuración en el archivo de salida especificado.
Credenciales de origen URL Para las credenciales de origen URL, un servidor local debe alojar un punto final GET para devolver el token OIDC. La respuesta puede ser en texto plano o JSON. También se pueden especificar encabezados de solicitud adicionales requeridos.
Para generar una configuración de identidad de fuerza laboral OIDC con origen URL, ejecute el siguiente comando:
# Generate an OIDC configuration file for URL-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:id_token
--credential-source-url= $URL_TO_RETURN_OIDC_ID_TOKEN
--credential-source-headers $HEADER_KEY = $HEADER_VALUE
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
--output-file=/path/to/generated/config.json
Donde es necesario sustituir las siguientes variables:
$WORKFORCE_POOL_ID
: ID del grupo de fuerza laboral.$PROVIDER_ID
: El ID del proveedor.$URL_TO_RETURN_OIDC_ID_TOKEN
: la URL del punto final del servidor local.$HEADER_KEY
y $HEADER_VALUE
: los pares clave/valor de encabezado adicionales para pasar la solicitud GET a $URL_TO_GET_OIDC_TOKEN
, por ejemplo, Metadata-Flavor=Google
.$WORKFORCE_POOL_USER_PROJECT
: el número de proyecto asociado con el proyecto de usuario de los grupos de fuerza laboral.Para generar una configuración SAML basada en URL, ejecute el siguiente comando:
# Generate a SAML configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:saml2
--credential-source-url= $URL_TO_GET_SAML_ASSERTION
--credential-source-headers