Octroi de l'accès aux charges de travail aux ressources OCI
Découvrez comment utiliser l'identité d'une charge de travail exécutée sur une grappe Kubernetes pour accorder à la charge de travail un accès détaillé à d'autres ressources OCI à l'aide du moteur Kubernetes (OKE).
Vous ne pouvez utiliser des identités de charge de travail que pour accorder l'accès aux ressources OCI lors de l'utilisation de grappes améliorées. Voir Grappes améliorées.
Dans Kubernetes, une charge de travail est une application s'exécutant sur une grappe Kubernetes. Une charge de travail peut être un composant d'application s'exécutant dans un seul pod, ou plusieurs composants d'application s'exécutant dans un jeu de pods qui fonctionnent ensemble. Tous les pods de la charge de travail s'exécutent dans le même espace de noms.
Pour accorder à tous les pods d'une charge de travail l'accès aux ressources Kubernetes, vous pouvez spécifier que chaque pod de la charge de travail doit utiliser le même compte de service Kubernetes. Vous pouvez ensuite accorder des autorisations de rôle de grappe Kubernetes au compte de service. Il s'agit du compte de service qui lie les pods de la charge de travail aux autorisations de rôle de grappe et qui accorde aux pods l'accès aux ressources Kubernetes.
Dans Oracle Cloud Infrastructure, une charge de travail s'exécutant sur une grappe Kubernetes est considérée comme une ressource à part entière. Une ressource de charge de travail est identifiée par la combinaison unique de grappe, d'espace de noms et de compte de service. Cette combinaison unique est appelée identité de charge de travail. Vous pouvez utiliser l'identité de charge de travail lors de la définition de politiques IAM pour accorder un accès détaillé à d'autres ressources OCI (telles que des seaux de stockage d'objets). En outre, vous pouvez utiliser Oracle Cloud Infrastructure Audit pour répondre aux exigences de conformité en suivant les demandes effectuées par l'identité de charge de travail, ce qui vous permet de surveiller et de signaler les accès non autorisés et les activités suspectes.
Pour accorder à tous les pods d'une charge de travail l'accès aux ressources OCI :
- Créez un espace de noms pour un compte de service.
- Créez un compte de service pour l'application à utiliser.
- Définissez une politique IAM pour accorder à la ressource de charge de travail l'accès à d'autres ressources OCI.
- Téléchargez et configurez la trousse SDK OCI appropriée pour le langage dans lequel l'application est écrite.
- Modifiez l'application pour spécifier :
-
- que les demandes de charge de travail doivent être authentifiées à l'aide du fournisseur d'identités de charge de travail Kubernetes Engine
- les ressources OCI auxquelles on doit accéder
- Mettez à jour la spécification de déploiement de l'application pour spécifier que chaque pod de la charge de travail doit utiliser le compte de service.
Notez les points suivants lors de l'utilisation des identités de charge de travail :
- Actuellement, vous ne pouvez pas utiliser d'identités de charge de travail avec des groupes dynamiques.
- Vous ne pouvez utiliser des identités de charge de travail qu'avec une trousse SDK OCI, et non avec la console ou l'API.
- Les trousses SDK OCI suivantes prennent actuellement en charge les identités de charge de travail :
- Go SDK v65.32.0 (et versions ultérieures)
- Trousse SDK Java v2.54.0 (et versions ultérieures)
- Trousse SDK Python v2.111.0 (et versions ultérieures)
- Trousse SDK .NET v87.3.0 (et versions ultérieures)
- Trousse SDK Ruby v2.19.0 (et versions ultérieures)
-
Pour assurer une réutilisation efficace des jetons et réduire la génération de jetons inutiles, créez une seule instance du fournisseur d'identités de charge de travail du moteur Kubernetes et réutilisez cette instance dans toutes les parties de l'application qui nécessitent une authentification. Chaque instance tient à jour son propre jeton en mémoire cache, de sorte que la création de plusieurs instances entraînera l'extraction et la gestion indépendantes de plusieurs jetons, ce qui entraînera des extractions de jetons en double, une charge inutile sur le service d'authentification, une utilisation inefficace des ressources et des temps de réponse système dégradés.
Exemple : Utilisation de la trousse SDK Go pour accorder aux charges de travail d'application l'accès aux ressources OCI
Pour accorder aux charges de travail d'application Go qui s'exécutent sur une grappe Kubernetes l'accès à d'autres ressources OCI :
-
Si vous ne l'avez pas encore fait, suivez les étapes pour configurer le fichier de configuration kubeconfig de la grappe et (s'il y a lieu) définissez la variable d'environnement KUBECONFIG pour qu'elle pointe vers le fichier. Notez que vous devez configurer votre propre fichier kubeconfig. Vous ne pouvez pas accéder à une grappe à l'aide d'un fichier kubeconfig configuré par un autre utilisateur. Voir Configuration de l'accès aux grappes.
- Obtenez l'OCID de la grappe (par exemple, à l'aide de l'onglet Détails de la grappe dans la console).
-
Créez un espace de noms pour le compte de service Kubernetes à utiliser en entrant :
kubectl create namespace <namespace-name>
Par exemple :
kubectl create namespace finance
- Créez un compte de service Kubernetes pour l'application à utiliser en entrant :
kubectl create serviceaccount <service-account-name> --namespace <namespace-name>
Par exemple :
kubectl create serviceaccount financeserviceaccount --namespace finance
- Définissez une politique IAM pour permettre à la charge de travail d'accéder aux ressources OCI nécessaires :
- Ouvrez le menu de navigation et sélectionnez Identité et sécurité. Sous identité, sélectionnez Politiques.
- Suivez les instructions sous Pour créer une politique et donnez un nom à la politique (par exemple,
acme-oke-finance-workload-policy
). -
Entrez un énoncé de politique pour permettre à la charge de travail d'accéder aux ressources OCI nécessaires, dans le format suivant :
Allow any-user to <verb> <resource> in <location> where all { request.principal.type = 'workload', request.principal.namespace = '<namespace-name>', request.principal.service_account = '<service-account-name>', request.principal.cluster_id = '<cluster-ocid>'}
où :
<namespace-name>
est le nom de l'espace de noms que vous avez créé précédemment.<service-account-name>
est le nom du compte de service que vous avez créé précédemment.<cluster-ocid>
est l'OCID de la grappe que vous avez obtenu précédemment.
Par exemple :
Allow any-user to manage objects in tenancy where all { request.principal.type = 'workload', request.principal.namespace = 'finance', request.principal.service_account = 'financeserviceaccount', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaaaf______jrd'}
- Sélectionnez Créer pour créer la politique.
- Installez la trousse SDK OCI pour Go (voir Trousse SDK pour Go).
-
Dans le code de votre application Go, ajoutez :
- fournisseur d'identités de charge de travail Kubernetes Engine (
OkeWorkloadIdentityConfigurationProvider
) - la ressource OCI à laquelle accéder
Par exemple, l'extrait de code suivant utilise l'identité de charge de travail pour l'authentification, crée un seau dans le service de stockage d'objets dans la région Pheonix (PHX) et charge un fichier dans le seau :
// ExampleObjectStorage_UploadFile shows how to create a bucket and upload a file using OKE Workload Identity // Ensure only a single instance of the identity provider is used to optimize token reuse. // Creating multiple instances may result in redundant token generation for the same workload. func ExampleObjectStorage_UploadFile() { rp, err := auth.OkeWorkloadIdentityConfigurationProvider() if err != nil { panic(err) } c, clerr := objectstorage.NewObjectStorageClientWithConfigurationProvider(rp) c.SetRegion("us-phoenix-1") helpers.FatalIfError(clerr) ctx := context.Background() bname := helpers.GetRandomString(8) namespace := getNamespace(ctx, c) createBucket(ctx, c, namespace, bname) contentlen := 1024 * 1000 filepath, filesize := helpers.WriteTempFileOfSize(int64(contentlen)) filename := path.Base(filepath) defer func() { os.Remove(filename) }() file, e := os.Open(filepath) defer file.Close() helpers.FatalIfError(e) e = putObject(ctx, c, namespace, bname, filename, filesize, file, nil) helpers.FatalIfError(e) // Output: // get namespace // create bucket // put object
- fournisseur d'identités de charge de travail Kubernetes Engine (
- Ouvrez la spécification de déploiement de l'application dans un éditeur de texte et :
- Ajoutez
serviceAccountName
et réglez-le au nom du compte de service que vous avez créé précédemment. Par exemple,serviceAccountName: financeserviceaccount
. - Ajoutez
automountServiceAccountToken
et réglez-le àtrue
.
Par exemple :
apiVersion: v1 kind: Pod metadata: name: nginx spec: serviceAccountName: financeserviceaccount automountServiceAccountToken: true containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
- Ajoutez
- Déployez l'application en entrant :
kubectl create -f <filename>
Par exemple :kubectl create -f financeworkloadidentity.yaml
Exemple : Utilisation de la trousse SDK Java pour accorder aux charges de travail d'application l'accès aux ressources OCI
Pour accorder aux charges de travail d'application Java exécutées sur une grappe Kubernetes l'accès à d'autres ressources OCI :
-
Si vous ne l'avez pas encore fait, suivez les étapes pour configurer le fichier de configuration kubeconfig de la grappe et (s'il y a lieu) définissez la variable d'environnement KUBECONFIG pour qu'elle pointe vers le fichier. Notez que vous devez configurer votre propre fichier kubeconfig. Vous ne pouvez pas accéder à une grappe à l'aide d'un fichier kubeconfig configuré par un autre utilisateur. Voir Configuration de l'accès aux grappes.
- Obtenez l'OCID de la grappe (par exemple, à l'aide de l'onglet Détails de la grappe dans la console).
-
Créez un espace de noms pour le compte de service Kubernetes à utiliser en entrant :
kubectl create namespace <namespace-name>
Par exemple :
kubectl create namespace finance
- Créez un compte de service Kubernetes pour l'application à utiliser en entrant :
kubectl create serviceaccount <service-account-name> --namespace <namespace-name>
Par exemple :
kubectl create serviceaccount financeserviceaccount --namespace finance
- Définissez une politique IAM pour permettre à la charge de travail d'accéder aux ressources OCI nécessaires :
- Ouvrez le menu de navigation et sélectionnez Identité et sécurité. Sous identité, sélectionnez Politiques.
- Suivez les instructions sous Pour créer une politique et donnez un nom à la politique (par exemple,
acme-oke-finance-workload-policy
). -
Entrez un énoncé de politique pour permettre à la charge de travail d'accéder aux ressources OCI nécessaires, dans le format suivant :
Allow any-user to <verb> <resource> in <location> where all { request.principal.type = 'workload', request.principal.namespace = '<namespace-name>', request.principal.service_account = '<service-account-name>', request.principal.cluster_id = '<cluster-ocid>'}
où :
<namespace-name>
est le nom de l'espace de noms que vous avez créé précédemment.<service-account-name>
est le nom du compte de service que vous avez créé précédemment.<cluster-ocid>
est l'OCID de la grappe que vous avez obtenu précédemment.
Par exemple :
Allow any-user to manage objects in tenancy where all { request.principal.type = 'workload', request.principal.namespace = 'finance', request.principal.service_account = 'financeserviceaccount', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaaaf______jrd'}
- Sélectionnez Créer pour créer la politique.
- Installez la trousse SDK OCI pour Java (voir Trousse SDK pour Java).
- Dans pom.xml de l'application, ajoutez l'artefact
oci-java-sdk-addons-oke-workload-identity
en tant que dépendance :
Notez que la version de la trousse SDK doit être 2.54.0 ou une version ultérieure.<dependency> <groupId>com.oracle.oci.sdk</groupId> <artifactId>oci-java-sdk-addons-oke-workload-identity</artifactId> <version>2.54.0</version> </dependency> <dependency> <groupId>com.oracle.oci.sdk</groupId> <artifactId>oci-java-sdk-common</artifactId> <version>2.54.0</version> </dependency>
- Dans le code de votre application Java, ajoutez :
- fournisseur d'identités de charge de travail Kubernetes Engine (
OkeWorkloadIdentityAuthenticationDetailsProvider
) - la ressource OCI à laquelle accéder
Par exemple, l'extrait de code suivant utilise l'identité de charge de travail pour l'authentification, crée un seau dans le service de stockage d'objets dans la région Pheonix (PHX) et charge un fichier dans le seau :
import com.oracle.bmc.Region; import com.oracle.bmc.auth.AuthenticationDetailsProvider; import com.oracle.bmc.auth.ConfigFileAuthenticationDetailsProvider; import com.oracle.bmc.auth.okeworkloadidentity.OkeWorkloadIdentityAuthenticationDetailsProvider; import com.oracle.bmc.objectstorage.ObjectStorage; import com.oracle.bmc.objectstorage.ObjectStorageClient; import com.oracle.bmc.objectstorage.model.BucketSummary; import com.oracle.bmc.objectstorage.requests.GetNamespaceRequest; import com.oracle.bmc.objectstorage.requests.GetObjectRequest; import com.oracle.bmc.objectstorage.requests.ListBucketsRequest; import com.oracle.bmc.objectstorage.requests.ListBucketsRequest.Builder; import com.oracle.bmc.objectstorage.responses.GetNamespaceResponse; import com.oracle.bmc.objectstorage.responses.GetObjectResponse; import com.oracle.bmc.objectstorage.responses.ListBucketsResponse; import java.io.InputStream; public class ObjectStorageSyncExample { public static void main(String[] args) throws Exception { /* Config the Container Engine for Kubernetes workload identity provider */ /*Ensure only a single instance of the identity provider is used to optimize token reuse. Creating multiple instances may lead to redundant token generation for the same workload.*/ final OkeWorkloadIdentityAuthenticationDetailsProvider provider = new OkeWorkloadIdentityAuthenticationDetailsProvider .OkeWorkloadIdentityAuthenticationDetailsProviderBuilder() .build(); /* Configure the client to use workload identity provider*/ ObjectStorage client = ObjectStorageClient.builder().region(Region.US_PHOENIX_1).build(provider); GetNamespaceResponse namespaceResponse = client.getNamespace(GetNamespaceRequest.builder().build()); String namespaceName = namespaceResponse.getValue(); System.out.println("Using namespace: " + namespaceName); Builder listBucketsBuilder = ListBucketsRequest.builder() .namespaceName(namespaceName) .compartmentId("enter tenancy id"); String nextToken = null; do { listBucketsBuilder.page(nextToken); ListBucketsResponse listBucketsResponse = client.listBuckets(listBucketsBuilder.build()); for (BucketSummary bucket : listBucketsResponse.getItems()) { System.out.println("Found bucket: " + bucket.getName()); } nextToken = listBucketsResponse.getOpcNextPage(); } while (nextToken != null); // fetch the file from the object storage String bucketName = null; String objectName = null; GetObjectResponse getResponse = client.getObject( GetObjectRequest.builder() .namespaceName(namespaceName) .bucketName(bucketName) .objectName(objectName) .build()); // stream contents should match the file uploaded try (final InputStream fileStream = getResponse.getInputStream()) { // use fileStream } // try-with-resources automatically closes fileStream client.close(); } }
- fournisseur d'identités de charge de travail Kubernetes Engine (
- Ouvrez la spécification de déploiement de l'application dans un éditeur de texte et :
- Ajoutez
serviceAccountName
et réglez-le au nom du compte de service que vous avez créé précédemment. Par exemple,serviceAccountName: financeserviceaccount
. - Ajoutez
automountServiceAccountToken
et réglez-le àtrue
.
Par exemple :
apiVersion: v1 kind: Pod metadata: name: nginx spec: serviceAccountName: financeserviceaccount automountServiceAccountToken: true containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
- Ajoutez
- Déployez l'application en entrant :
kubectl create -f <filename>
Par exemple :kubectl create -f financeworkloadidentity.yaml
Exemple : Utilisation de la trousse SDK Java pour accorder aux charges de travail d'application l'accès aux ressources OCI dans un autre compartiment
Pour accorder aux charges de travail d'application Java exécutées sur une grappe Kubernetes dans un compartiment l'accès à d'autres ressources OCI dans un autre compartiment :
-
Si vous ne l'avez pas encore fait, suivez les étapes pour configurer le fichier de configuration kubeconfig de la grappe et (s'il y a lieu) définissez la variable d'environnement KUBECONFIG pour qu'elle pointe vers le fichier. Notez que vous devez configurer votre propre fichier kubeconfig. Vous ne pouvez pas accéder à une grappe à l'aide d'un fichier kubeconfig configuré par un autre utilisateur. Voir Configuration de l'accès aux grappes.
- Obtenez l'OCID de la grappe (par exemple, à l'aide de l'onglet Détails de la grappe dans la console).
- En tant qu'administrateur de grappe, créez un espace de noms pour le compte de service Kubernetes à utiliser en entrant :
kubectl create namespace <namespace-name>
Par exemple :
kubectl create namespace finance
-
En tant qu'administrateur de grappe, créez un compte de service Kubernetes pour l'application à utiliser en entrant :
kubectl create serviceaccount <service-account-name> --namespace <namespace-name>
Par exemple :
kubectl create serviceaccount financeserviceaccount --namespace finance
-
En tant qu'administrateur de location, définissez une politique IAM pour permettre à un administrateur de grappe de lier des charges de travail exécutées sur une grappe dans un compartiment, à d'autres ressources OCI dans un autre compartiment :
- Ouvrez le menu de navigation et sélectionnez Identité et sécurité. Sous identité, sélectionnez Politiques.
- Suivez les instructions sous Pour créer une politique et donnez un nom à la politique (par exemple,
acme-oke-finance-workload-policy
). Entrez des énoncés de politique pour permettre à un administrateur de grappe de lier des charges de travail exécutées sur une grappe dans un compartiment, à d'autres ressources OCI dans un autre compartiment, dans le format suivant :
Allow group cluster-admins to manage cluster-workload-mappings in compartment <compartment-one> Allow group cluster-admins to {CLUSTER_WORKLOAD_COMPARTMENT_BIND,CLUSTER_WORKLOAD_COMPARTMENT_UNBIND} in compartment <compartment-two>
où :
<compartment-one>
est le compartiment auquel la grappe appartient<compartment-two>
est le compartiment auquel appartiennent les autres ressources OCI.
Par exemple :
Notez que si un groupe ne se trouve pas dans le domaine d'identité par défaut, ajoutez le préfixeAllow group cluster-admins to manage cluster-workload-mappings in compartment finance Allow group cluster-admins to {CLUSTER_WORKLOAD_COMPARTMENT_BIND,CLUSTER_WORKLOAD_COMPARTMENT_UNBIND} in compartment sales
group '<identity-domain-name>'/'group-name'
au nom du groupe. Vous pouvez également spécifier un groupe à l'aide de son OCID, dans le formatgroup id <group-ocid>
.- Sélectionnez Créer pour créer la politique.
-
En tant qu'administrateur de grappe, dans le compartiment auquel appartient la grappe, créez un mappage de charge de travail qui mappe les charges de travail exécutées sur la grappe au compartiment auquel appartiennent les autres ressources OCI :
oci ce workload-mapping create --namespace <namespace-name> --mapped-compartment-id <compartment-two-ocid> --cluster-id <cluster-ocid>
Par exemple :
oci ce workload-mapping create --namespace finance --mapped-compartment-id ocid1.compartment.oc1..aaaaaaaaad______fda --cluster-id ocid1.cluster.oc1.iad.aaaaaaaaaf______jrd
-
En tant qu'administrateur de la ressource du deuxième compartiment, définissez une politique IAM pour permettre à la charge de travail d'accéder aux ressources OCI du compartiment :
- Ouvrez le menu de navigation et sélectionnez Identité et sécurité. Sous identité, sélectionnez Politiques.
- Suivez les instructions sous Pour créer une politique et donnez un nom à la politique (par exemple,
acme-oke-finance-workload-policy
). -
Entrez un énoncé de politique pour permettre à la charge de travail d'accéder aux ressources OCI nécessaires, dans le format suivant :
Allow any-user to <verb> <resource> in <location> where all { request.principal.type = 'workload', request.principal.namespace = '<namespace-name>', request.principal.service_account = '<service-account-name>', request.principal.cluster_id = '<cluster-ocid>'}
où :
<namespace-name>
est le nom de l'espace de noms que vous avez créé précédemment.<service-account-name>
est le nom du compte de service que vous avez créé précédemment.<cluster-ocid>
est l'OCID de la grappe que vous avez obtenu précédemment.
Par exemple :
Allow any-user to manage objects in compartment sales where all { request.principal.type = 'workload', request.principal.namespace = 'finance', request.principal.service_account = 'financeserviceaccount', request.principal.cluster_id = 'ocid1.cluster.oc1.iad.aaaaaaaaaf______jrd'}
- Sélectionnez Créer pour créer la politique.
- Installez la trousse SDK OCI pour Java (voir Trousse SDK pour Java). Notez que la version de la trousse SDK doit être 2.66.0 ou une version ultérieure (ou 3.18.0 ou une version ultérieure).
- Dans pom.xml de l'application, ajoutez l'artefact
oci-java-sdk-addons-oke-workload-identity
en tant que dépendance :
Notez que la version de la trousse SDK doit être 2.66.0 ou une version ultérieure (ou 3.18.0 ou une version ultérieure).<dependency> <groupId>com.oracle.oci.sdk</groupId> <artifactId>oci-java-sdk-addons-oke-workload-identity</artifactId> <version>2.66.0</version> </dependency> <dependency> <groupId>com.oracle.oci.sdk</groupId> <artifactId>oci-java-sdk-common</artifactId> <version>2.66.0</version> </dependency>
- Dans le code de votre application Java, ajoutez :
- fournisseur d'identités de charge de travail Kubernetes Engine (
OkeWorkloadIdentityAuthenticationDetailsProvider
) - la ressource OCI à laquelle accéder
Par exemple, l'extrait de code suivant utilise l'identité de charge de travail pour l'authentification, crée un seau dans le service de stockage d'objets dans la région Pheonix (PHX) et charge un fichier dans le seau :
import com.oracle.bmc.Region; import com.oracle.bmc.auth.AuthenticationDetailsProvider; import com.oracle.bmc.auth.ConfigFileAuthenticationDetailsProvider; import com.oracle.bmc.auth.okeworkloadidentity.OkeWorkloadIdentityAuthenticationDetailsProvider; import com.oracle.bmc.objectstorage.ObjectStorage; import com.oracle.bmc.objectstorage.ObjectStorageClient; import com.oracle.bmc.objectstorage.model.BucketSummary; import com.oracle.bmc.objectstorage.requests.GetNamespaceRequest; import com.oracle.bmc.objectstorage.requests.GetObjectRequest; import com.oracle.bmc.objectstorage.requests.ListBucketsRequest; import com.oracle.bmc.objectstorage.requests.ListBucketsRequest.Builder; import com.oracle.bmc.objectstorage.responses.GetNamespaceResponse; import com.oracle.bmc.objectstorage.responses.GetObjectResponse; import com.oracle.bmc.objectstorage.responses.ListBucketsResponse; import java.io.InputStream; public class ObjectStorageSyncExample { public static void main(String[] args) throws Exception { /* Config the Container Engine for Kubernetes workload identity provider */ /*Ensure only a single instance of the identity provider is used to optimize token reuse. Creating multiple instances may lead to redundant token generation for the same workload.*/ final OkeWorkloadIdentityAuthenticationDetailsProvider provider = new OkeWorkloadIdentityAuthenticationDetailsProvider .OkeWorkloadIdentityAuthenticationDetailsProviderBuilder() .build(); /* Configure the client to use workload identity provider*/ ObjectStorage client = ObjectStorageClient.builder().region(Region.US_PHOENIX_1).build(provider); GetNamespaceResponse namespaceResponse = client.getNamespace(GetNamespaceRequest.builder().build()); String namespaceName = namespaceResponse.getValue(); System.out.println("Using namespace: " + namespaceName); Builder listBucketsBuilder = ListBucketsRequest.builder() .namespaceName(namespaceName) .compartmentId("enter tenancy id"); String nextToken = null; do { listBucketsBuilder.page(nextToken); ListBucketsResponse listBucketsResponse = client.listBuckets(listBucketsBuilder.build()); for (BucketSummary bucket : listBucketsResponse.getItems()) { System.out.println("Found bucket: " + bucket.getName()); } nextToken = listBucketsResponse.getOpcNextPage(); } while (nextToken != null); // fetch the file from the object storage String bucketName = null; String objectName = null; GetObjectResponse getResponse = client.getObject( GetObjectRequest.builder() .namespaceName(namespaceName) .bucketName(bucketName) .objectName(objectName) .build()); // stream contents should match the file uploaded try (final InputStream fileStream = getResponse.getInputStream()) { // use fileStream } // try-with-resources automatically closes fileStream client.close(); } }
- fournisseur d'identités de charge de travail Kubernetes Engine (
- Ouvrez la spécification de déploiement de l'application dans un éditeur de texte et :
- Ajoutez
namespace
et réglez-le au nom de l'espace de noms que vous avez créé précédemment. Par exemple,namespace: finance
. - Ajoutez
serviceAccountName
et réglez-le au nom du compte de service que vous avez créé précédemment. Par exemple,serviceAccountName: financeserviceaccount
. - Ajoutez
automountServiceAccountToken
et réglez-le àtrue
.
Par exemple :
apiVersion: v1 kind: Pod metadata: name: nginx namespace: finance spec: serviceAccountName: financeserviceaccount automountServiceAccountToken: true containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
- Ajoutez
- Déployez l'application en entrant :
kubectl create -f <filename>
Par exemple :kubectl create -f financeworkloadidentity.yaml