Bibliothèque client d'authentification open source pour Java.
Ce projet se compose de 3 artefacts :
Table des matières:
Démarrage rapide
google-auth-library-oauth2-http
informations d'identification de la bibliothèque-auth-google-google
google-auth-library-appengine
Statut de l'IC
Contribuer
Licence
Si vous utilisez Maven, ajoutez ceci à votre fichier pom.xml (notez que vous pouvez remplacer google-auth-library-oauth2-http
par l'un des google-auth-library-credentials
et google-auth-library-appengine
, selon vos besoins en matière d'application) :
< dependency >
< groupId >com.google.auth groupId >
< artifactId >google-auth-library-oauth2-http artifactId >
< version >1.19.0 version >
dependency >
Si vous utilisez Gradle, ajoutez ceci à vos dépendances
implementation ' com.google.auth:google-auth-library-oauth2-http:1.19.0 '
Si vous utilisez SBT, ajoutez ceci à vos dépendances
libraryDependencies + = " com.google.auth " % " google-auth-library-oauth2-http " % " 1.19.0 "
Cette bibliothèque fournit une implémentation des informations d'identification par défaut de l'application pour Java. Les informations d'identification par défaut de l'application fournissent un moyen simple d'obtenir les informations d'identification d'autorisation à utiliser pour appeler les API Google.
Ils conviennent mieux aux cas où l'appel doit avoir le même niveau d'identité et d'autorisation pour l'application, indépendamment de l'utilisateur. Il s'agit de l'approche recommandée pour autoriser les appels aux API Cloud, en particulier lorsque vous créez une application qui utilise Google Cloud Platform.
Les informations d'identification par défaut de l'application prennent également en charge la fédération d'identité de charge de travail pour accéder aux ressources Google Cloud à partir de plates-formes non Google Cloud, notamment Amazon Web Services (AWS), Microsoft Azure ou tout fournisseur d'identité prenant en charge OpenID Connect (OIDC). La fédération Workload Identity est recommandée pour les environnements non Google Cloud, car elle évite d'avoir à télécharger, gérer et stocker localement les clés privées des comptes de service. Voir : Workload Identity Federation.
Pour obtenir les informations d'identification par défaut de l'application, utilisez GoogleCredentials.getApplicationDefault()
ou GoogleCredentials.getApplicationDefault(HttpTransportFactory)
. Ces méthodes renvoient les informations d'identification par défaut de l'application qui sont utilisées pour identifier et autoriser l'ensemble de l'application. Les éléments suivants sont recherchés (dans l'ordre) pour trouver les informations d'identification par défaut de l'application :
GOOGLE_APPLICATION_CREDENTIALS
gcloud auth application-default login
du SDK Google CloudNO_GCE_CHECK=true
GCE_METADATA_HOST=
Pour obtenir les informations d'identification d'une clé JSON de compte de service, utilisez GoogleCredentials.fromStream(InputStream)
ou GoogleCredentials.fromStream(InputStream, HttpTransportFactory)
. Notez que les informations d'identification doivent être actualisées avant que le jeton d'accès soit disponible.
GoogleCredentials credentials = GoogleCredentials . fromStream ( new FileInputStream ( "/path/to/credentials.json" ));
credentials . refreshIfExpired ();
AccessToken token = credentials . getAccessToken ();
// OR
AccessToken token = credentials . refreshAccessToken ();
Permet aux informations d'identification délivrées à un utilisateur ou à un compte de service d'usurper l'identité d'un autre. Le projet source utilisant ImpersonatedCredentials doit activer l'API "IAMCredentials". En outre, le compte de service cible doit accorder au mandataire d'origine le rôle IAM « Créateur de jeton de compte de service ».
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 );
Grâce à la fédération d'identité de charge de travail, votre application peut accéder aux ressources Google Cloud à partir d'Amazon Web Services (AWS), de Microsoft Azure ou de tout fournisseur d'identité prenant en charge OpenID Connect (OIDC).
Traditionnellement, les applications exécutées en dehors de Google Cloud utilisaient des clés de compte de service pour accéder aux ressources Google Cloud. Grâce à la fédération d'identité, votre charge de travail peut usurper l'identité d'un compte de service. Cela permet à la charge de travail externe d'accéder directement aux ressources Google Cloud, éliminant ainsi la charge de maintenance et de sécurité associée aux clés de compte de service.
Pour accéder aux ressources Google Cloud à partir d'Amazon Web Services (AWS), les conditions suivantes sont nécessaires :
Suivez les instructions détaillées sur la façon de configurer la fédération d'identité de charge de travail à partir d'AWS.
Après avoir configuré le fournisseur AWS pour emprunter l'identité d'un compte de service, un fichier de configuration des informations d'identification doit être généré. Contrairement aux fichiers d'informations d'identification du compte de service, le fichier de configuration des informations d'identification généré contient des métadonnées non sensibles pour indiquer à la bibliothèque comment récupérer les jetons de sujet externes et les échanger contre des jetons d'accès au compte de service. Le fichier de configuration peut être généré à l'aide de gcloud CLI.
Pour générer la configuration AWS Workload Identity, exécutez la commande suivante :
# 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
Où les variables suivantes doivent être remplacées :
$PROJECT_NUMBER
: numéro du projet Google Cloud.$POOL_ID
: ID du pool d'identités de charge de travail.$AWS_PROVIDER_ID
: ID du fournisseur AWS.$SERVICE_ACCOUNT_EMAIL
: L'e-mail du compte de service à usurper l'identité.Cela génère le fichier de configuration dans le fichier de sortie spécifié.
Si vous utilisez AWS IMDSv2, un indicateur supplémentaire --enable-imdsv2
doit être ajouté à la commande 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
Vous pouvez désormais utiliser la bibliothèque Auth pour appeler les ressources Google Cloud depuis AWS.
Pour accéder aux ressources Google Cloud à partir de Microsoft Azure, les conditions suivantes sont nécessaires :
Suivez les instructions détaillées pour savoir comment configurer la fédération Workload Identity à partir de Microsoft Azure.
Après avoir configuré le fournisseur Azure pour emprunter l'identité d'un compte de service, un fichier de configuration des informations d'identification doit être généré. Contrairement aux fichiers d'informations d'identification du compte de service, le fichier de configuration des informations d'identification généré contient des métadonnées non sensibles pour indiquer à la bibliothèque comment récupérer les jetons de sujet externes et les échanger contre des jetons d'accès au compte de service. Le fichier de configuration peut être généré à l'aide de gcloud CLI.
Pour générer la configuration Azure Workload Identity, exécutez la commande suivante :
# 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
Où les variables suivantes doivent être remplacées :
$PROJECT_NUMBER
: numéro du projet Google Cloud.$POOL_ID
: ID du pool d'identités de charge de travail.$AZURE_PROVIDER_ID
: ID du fournisseur Azure.$SERVICE_ACCOUNT_EMAIL
: L'e-mail du compte de service à usurper l'identité.Cela génère le fichier de configuration dans le fichier de sortie spécifié.
Vous pouvez désormais utiliser la bibliothèque Auth pour appeler les ressources Google Cloud depuis Azure.
Pour accéder aux ressources Google Cloud à partir d'un fournisseur d'identité prenant en charge OpenID Connect (OIDC), les conditions suivantes sont requises :
Suivez les instructions détaillées pour savoir comment configurer la fédération d'identité de charge de travail à partir d'un fournisseur d'identité OIDC.
Après avoir configuré le fournisseur OIDC pour emprunter l'identité d'un compte de service, un fichier de configuration des informations d'identification doit être généré. Contrairement aux fichiers d'informations d'identification du compte de service, le fichier de configuration des informations d'identification généré contient des métadonnées non sensibles pour indiquer à la bibliothèque comment récupérer les jetons de sujet externes et les échanger contre des jetons d'accès au compte de service. Le fichier de configuration peut être généré à l'aide de gcloud CLI.
Pour les fournisseurs OIDC, la bibliothèque Auth peut récupérer les jetons OIDC soit à partir d'un emplacement de fichier local (informations d'identification provenant d'un fichier), soit à partir d'un serveur local (informations d'identification provenant d'une URL).
Informations d'identification provenant d'un fichier Pour les informations d'identification provenant d'un fichier, un processus en arrière-plan doit actualiser en permanence l'emplacement du fichier avec un nouveau jeton OIDC avant son expiration. Pour les jetons d'une durée de vie d'une heure, le jeton doit être mis à jour dans le fichier toutes les heures. Le jeton peut être stocké directement sous forme de texte brut ou au format JSON.
Pour générer une configuration OIDC provenant d'un fichier, exécutez la commande suivante :
# 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
Où les variables suivantes doivent être remplacées :
$PROJECT_NUMBER
: numéro du projet Google Cloud.$POOL_ID
: ID du pool d'identités de charge de travail.$OIDC_PROVIDER_ID
: ID du fournisseur OIDC.$SERVICE_ACCOUNT_EMAIL
: L'e-mail du compte de service à usurper l'identité.$PATH_TO_OIDC_ID_TOKEN
: Le chemin du fichier utilisé pour récupérer le jeton OIDC.Cela génère le fichier de configuration dans le fichier de sortie spécifié.
Informations d'identification provenant d'une URL Pour les informations d'identification provenant d'une URL, un serveur local doit héberger un point de terminaison GET pour renvoyer le jeton OIDC. La réponse peut être en texte brut ou en JSON. Des en-têtes de requête supplémentaires requis peuvent également être spécifiés.
Pour générer une configuration d'identité de charge de travail OIDC provenant d'une URL, exécutez la commande suivante :
# 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
Où les variables suivantes doivent être remplacées :
$PROJECT_NUMBER
: numéro du projet Google Cloud.$POOL_ID
: ID du pool d'identités de charge de travail.$OIDC_PROVIDER_ID
: ID du fournisseur OIDC.$SERVICE_ACCOUNT_EMAIL
: L'e-mail du compte de service à usurper l'identité.$URL_TO_GET_OIDC_TOKEN
: L'URL du point de terminaison du serveur local à appeler pour récupérer le jeton OIDC.$HEADER_KEY
et $HEADER_VALUE
: les paires clé/valeur d'en-tête supplémentaires à transmettre la requête GET à $URL_TO_GET_OIDC_TOKEN
, par exemple Metadata-Flavor=Google
.Vous pouvez désormais utiliser la bibliothèque Auth pour appeler des ressources Google Cloud à partir d'un fournisseur OIDC.
Informations d'identification provenant d'un exécutable Pour les informations d'identification provenant d'un exécutable, un exécutable local est utilisé pour récupérer le jeton tiers. L'exécutable doit gérer la fourniture d'un jeton d'ID OIDC valide et non expiré ou d'une assertion SAML au format JSON sur la sortie standard.
Pour utiliser des informations d'identification provenant d'un exécutable, la variable d'environnement GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES
doit être définie sur 1
.
Pour générer une configuration Workload Identity provenant d'un exécutable, exécutez la commande suivante :
# 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
Où les variables suivantes doivent être remplacées :
$PROJECT_NUMBER
: numéro du projet Google Cloud.$POOL_ID
: ID du pool d'identités de charge de travail.$PROVIDER_ID
: ID du fournisseur OIDC ou SAML.$SERVICE_ACCOUNT_EMAIL
: L'e-mail du compte de service à usurper l'identité.$SUBJECT_TOKEN_TYPE
: Le type de jeton d'objet.$EXECUTABLE_COMMAND
: La commande complète à exécuter, y compris les arguments. Doit être un chemin absolu vers le programme. L'indicateur --executable-timeout-millis
est facultatif. Il s'agit de la durée pendant laquelle la bibliothèque d'authentification attendra la fin de l'exécutable, en millisecondes. La valeur par défaut est 30 secondes lorsqu'elle n'est pas fournie. La valeur maximale autorisée est de 2 minutes. Le minimum est de 5 secondes.
L'indicateur --executable-output-file
est facultatif. S'il est fourni, le chemin du fichier doit pointer vers la réponse d'identification 3PI générée par l'exécutable. Ceci est utile pour mettre en cache les informations d’identification. En spécifiant ce chemin, les bibliothèques Auth vérifieront d'abord son existence avant d'exécuter l'exécutable. En mettant en cache la réponse JSON de l'exécutable dans ce fichier, cela améliore les performances car cela évite d'avoir à exécuter l'exécutable jusqu'à ce que les informations d'identification mises en cache dans le fichier de sortie aient expiré. L'exécutable doit gérer l'écriture dans ce fichier - les bibliothèques d'authentification tenteront uniquement de lire à partir de cet emplacement. Le format du contenu du fichier doit correspondre au format JSON attendu par l'exécutable indiqué ci-dessous.
Pour récupérer le jeton tiers, la bibliothèque appellera l'exécutable à l'aide de la commande spécifiée. La sortie de l'exécutable doit respecter le format de réponse spécifié ci-dessous. Il doit afficher la réponse sur la sortie standard.
Un exemple de réponse OIDC exécutable réussie :
{
"version" : 1 ,
"success" : true ,
"token_type" : " urn:ietf:params:oauth:token-type:id_token " ,
"id_token" : " HEADER.PAYLOAD.SIGNATURE " ,
"expiration_time" : 1620499962
}
Un exemple de réponse SAML exécutable réussie :
{
"version" : 1 ,
"success" : true ,
"token_type" : " urn:ietf:params:oauth:token-type:saml2 " ,
"saml_response" : " ... " ,
"expiration_time" : 1620499962
}
Un exemple de réponse d'erreur exécutable :
{
"version" : 1 ,
"success" : false ,
"code" : " 401 " ,
"message" : " Caller not authorized. "
}
Ce sont tous des champs obligatoires pour une réponse d’erreur. Les champs de code et de message seront utilisés par la bibliothèque dans le cadre de l'exception levée.
Pour les réponses réussies, le champ expiration_time
est requis uniquement lorsqu'un fichier de sortie est spécifié dans la configuration des informations d'identification.
Résumé des champs du format de réponse :
version
: La version de la sortie JSON. Actuellement, seule la version 1 est prise en charge.success
: lorsque c'est vrai, la réponse doit contenir le jeton tiers et le type de jeton. La réponse doit également contenir le champ expiration_time si un fichier de sortie a été spécifié dans la configuration des informations d'identification. L'exécutable doit également se terminer avec le code de sortie 0. Lorsqu'il est faux, la réponse doit contenir le code d'erreur et les champs de message et se terminer avec une valeur non nulle.token_type
: le type de jeton de sujet tiers. Doit être urn:ietf:params:oauth:token-type:jwt , urn:ietf:params:oauth:token-type:id_token ou urn:ietf:params:oauth:token-type:saml2 .id_token
: le jeton OIDC tiers.saml_response
: La réponse SAML tierce.expiration_time
: délai d'expiration du jeton de sujet tiers en secondes (heure d'époque Unix).code
: La chaîne du code d’erreur.message
: Le message d'erreur. Tous les types de réponse doivent inclure à la fois les champs version
et success
.
token_type
et l'un des id_token
ou saml_response
. Le champ expiration_time
doit également être présent si un fichier de sortie a été spécifié dans la configuration des informations d'identification.code
et message
.La bibliothèque remplira les variables d'environnement suivantes lors de l'exécution de l'exécutable :
GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE
: le champ d'audience de la configuration des informations d'identification. Toujours présent.GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE
: ce type de jeton d'objet attendu. Toujours présent.GOOGLE_EXTERNAL_ACCOUNT_IMPERSONATED_EMAIL
: adresse e-mail du compte de service. Présent uniquement lorsque l’usurpation d’identité du compte de service est utilisée.GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE
: emplacement du fichier de sortie de la configuration des informations d'identification. Présent uniquement lorsque spécifié dans la configuration des informations d’identification.Ces variables d'environnement peuvent être utilisées par l'exécutable pour éviter de coder en dur ces valeurs.
Les pratiques de sécurité suivantes sont fortement recommandées :
Compte tenu de la complexité de l'utilisation d'informations d'identification provenant d'un exécutable, il est recommandé d'utiliser les mécanismes pris en charge existants (provenant d'un fichier/d'une URL) pour fournir des informations d'identification tierces, à moins qu'ils ne répondent pas à vos exigences spécifiques.
Vous pouvez désormais utiliser la bibliothèque Auth pour appeler des ressources Google Cloud à partir d'un fournisseur OIDC ou SAML.
Une implémentation personnalisée d'IdentityPoolSubjectTokenSupplier peut être utilisée lors de la création d'IdentityPoolCredentials pour fournir un jeton d'objet qui peut être échangé contre un jeton d'accès GCP. Le fournisseur doit renvoyer un jeton d'objet valide et non expiré lorsqu'il est appelé par l'identifiant GCP.
IdentityPoolCredentials ne met pas en cache le jeton renvoyé, une logique de mise en cache doit donc être implémentée dans le fournisseur de jeton pour empêcher plusieurs demandes pour le même jeton d'objet.
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 ();
Où se trouve l'audience : //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_POOL_ID/providers/$PROVIDER_ID
Où les variables suivantes doivent être remplacées :
$PROJECT_NUMBER
: numéro du projet Google Cloud.$WORKLOAD_POOL_ID
: ID du pool d'identités de charge de travail.$PROVIDER_ID
: L'ID du fournisseur.Les valeurs d'audience, d'URL d'usurpation d'identité du compte de service et de tout autre champ de générateur peuvent également être trouvées en générant un fichier de configuration d'identifiants avec gcloud CLI.
Une implémentation personnalisée d'AwsSecurityCredentialsSupplier peut être fournie lors de l'initialisation d'AwsCredentials. Si elle est fournie, l'instance AwsCredentials laissera le soin au fournisseur de récupérer les informations d'identification de sécurité AWS à échanger contre un jeton d'accès GCP. Le fournisseur doit renvoyer des informations d'identification de sécurité AWS valides et non expirées lorsqu'il est appelé par les informations d'identification GCP.
AWSCredentials ne met pas en cache les informations d'identification ou la région de sécurité AWS renvoyées. Une logique de mise en cache doit donc être implémentée chez le fournisseur pour empêcher plusieurs demandes pour les mêmes ressources.
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 ();
Où se trouve l'audience : //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_POOL_ID/providers/$PROVIDER_ID
Où les variables suivantes doivent être remplacées :
$PROJECT_NUMBER
: numéro du projet Google Cloud.$WORKLOAD_POOL_ID
: ID du pool d'identités de charge de travail.$PROVIDER_ID
: L'ID du fournisseur.Les valeurs d'audience, d'URL d'usurpation d'identité du compte de service et de tout autre champ de générateur peuvent également être trouvées en générant un fichier de configuration d'identifiants avec gcloud CLI.
Lors de la création d'une configuration d'informations d'identification avec Workload Identity Federation à l'aide de l'emprunt d'identité du compte de service, vous pouvez fournir un argument facultatif pour configurer la durée de vie du jeton d'accès au compte de service.
Pour générer la configuration avec une durée de vie du jeton configurable, exécutez la commande suivante (cet exemple utilise une configuration AWS, mais la durée de vie du jeton peut être configurée pour tous les fournisseurs de fédération d'identité de charge de travail) :
# 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
Où les variables suivantes doivent être remplacées :
$PROJECT_NUMBER
: numéro du projet Google Cloud.$POOL_ID
: ID du pool d'identités de charge de travail.$AWS_PROVIDER_ID
: ID du fournisseur AWS.$SERVICE_ACCOUNT_EMAIL
: L'e-mail du compte de service à usurper l'identité.$TOKEN_LIFETIME
: La durée de vie souhaitée du jeton d'accès au compte de service en secondes. L’indicateur service-account-token-lifetime-seconds
est facultatif. S’il n’est pas fourni, la valeur par défaut est d’une heure. La valeur minimale autorisée est de 600 (10 minutes) et la valeur maximale autorisée est de 43 200 (12 heures). Si une durée de vie supérieure à une heure est requise, le compte de service doit être ajouté en tant que valeur autorisée dans une stratégie d'organisation qui applique la contrainte constraints/iam.allowServiceAccountCredentialLifetimeExtension
.
Notez que la configuration d'une durée de vie courte (par exemple 10 minutes) entraînera le lancement par la bibliothèque du flux d'échange de jetons complet toutes les 10 minutes, qui appellera le fournisseur de jetons tiers même si le jeton tiers n'a pas expiré.
La fédération d'identité de la main-d'œuvre vous permet d'utiliser un fournisseur d'identité externe (IdP) pour authentifier et autoriser une main-d'œuvre (un groupe d'utilisateurs, tels que des employés, des partenaires et des sous-traitants) à l'aide d'IAM, afin que les utilisateurs puissent accéder aux services Google Cloud. La fédération d'identité de la main-d'œuvre étend les capacités d'identité de Google Cloud pour prendre en charge l'authentification unique sans synchronisation et basée sur les attributs.
Avec la fédération d'identité du personnel, votre personnel peut accéder aux ressources Google Cloud à l'aide d'un fournisseur d'identité externe (IdP) prenant en charge OpenID Connect (OIDC) ou SAML 2.0, tel qu'Azure Active Directory (Azure AD), Active Directory Federation Services (AD FS), Okta. , et d'autres.
Pour accéder aux ressources Google Cloud à partir d'un fournisseur d'identité prenant en charge OpenID Connect (OIDC), les conditions suivantes sont requises :
Suivez les instructions détaillées sur la façon de configurer la fédération des identités du personnel.
Après avoir configuré un fournisseur OIDC ou SAML 2.0, un fichier de configuration des informations d'identification doit être généré. Le fichier de configuration des informations d'identification généré contient des métadonnées non sensibles pour indiquer à la bibliothèque comment récupérer les jetons de sujet externes et les échanger contre des jetons d'accès GCP. Le fichier de configuration peut être généré à l'aide de gcloud CLI.
La bibliothèque Auth peut récupérer des jetons de sujet externes à partir d'un emplacement de fichier local (informations d'identification provenant d'un fichier), d'un serveur local (informations d'identification provenant d'une URL) ou en appelant un exécutable (informations d'identification provenant d'un exécutable).
Informations d'identification provenant d'un fichier Pour les informations d'identification provenant d'un fichier, un processus en arrière-plan doit actualiser en permanence l'emplacement du fichier avec un nouveau jeton d'objet avant son expiration. Pour les jetons d'une durée de vie d'une heure, le jeton doit être mis à jour dans le fichier toutes les heures. Le jeton peut être stocké directement sous forme de texte brut ou au format JSON.
Pour générer une configuration OIDC provenant d'un fichier, exécutez la commande suivante :
# 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
Où les variables suivantes doivent être remplacées :
$WORKFORCE_POOL_ID
: ID du pool de main-d'œuvre.$PROVIDER_ID
: L'ID du fournisseur.$PATH_TO_OIDC_ID_TOKEN
: Le chemin du fichier utilisé pour récupérer le jeton OIDC.$WORKFORCE_POOL_USER_PROJECT
: Le numéro de projet associé au projet utilisateur des pools de main-d'œuvre.Pour générer une configuration SAML provenant d'un fichier, exécutez la commande suivante :
# 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
Où les variables suivantes doivent être remplacées :
$WORKFORCE_POOL_ID
: ID du pool de main-d'œuvre.$PROVIDER_ID
: L'ID du fournisseur.$PATH_TO_SAML_ASSERTION
: Le chemin du fichier utilisé pour récupérer l'assertion SAML codée en base64.$WORKFORCE_POOL_USER_PROJECT
: Le numéro de projet associé au projet utilisateur des pools de main-d'œuvre.Ces commandes génèrent le fichier de configuration dans le fichier de sortie spécifié.
Informations d'identification provenant d'une URL Pour les informations d'identification provenant d'une URL, un serveur local doit héberger un point de terminaison GET pour renvoyer le jeton OIDC. La réponse peut être en texte brut ou en JSON. Des en-têtes de requête supplémentaires requis peuvent également être spécifiés.
Pour générer une configuration d'identité de personnel OIDC provenant d'une URL, exécutez la commande suivante :
# 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
Où les variables suivantes doivent être remplacées :
$WORKFORCE_POOL_ID
: ID du pool de main-d'œuvre.$PROVIDER_ID
: L'ID du fournisseur.$URL_TO_RETURN_OIDC_ID_TOKEN
: L'URL du point de terminaison du serveur local.$HEADER_KEY
et $HEADER_VALUE
: les paires clé/valeur d'en-tête supplémentaires à transmettre la requête GET à $URL_TO_GET_OIDC_TOKEN
, par exemple Metadata-Flavor=Google
.$WORKFORCE_POOL_USER_PROJECT
: Le numéro de projet associé au projet utilisateur des pools de main-d'œuvre.Pour générer une configuration SAML provenant d'une URL, exécutez la commande suivante :
# 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