Appel de services à partir d'une instance
Cette rubrique explique comment autoriser des instances à appeler des services dans Oracle Cloud Infrastructure.
Introduction
Cette procédure explique comment autoriser une instance à effectuer des appels d'API dans les services Oracle Cloud Infrastructure. Après avoir configuré les ressources et les stratégies requises, une application exécutée sur une instance peut appeler des services publics Oracle Cloud Infrastructure. Ainsi, vous n'avez pas besoin de configurer des informations d'identification utilisateur ou un fichier de configuration.
Concepts
- Groupe dynamique
- Les groupes dynamiques vous permettent de regrouper des instances Oracle Cloud Infrastructure en tant qu'acteurs principaux, semblables à des groupes d'utilisateurs. Vous pouvez ensuite créer des stratégies permettant aux instances de ces groupes d'effectuer des appels d'API vers les services Oracle Cloud Infrastructure. L'appartenance au groupe est déterminée par un ensemble de critères que vous définissez, appelé règles de mise en correspondance.
- Règle de mise en correspondance
- Lorsque vous configurez un groupe dynamique, vous définissez également les règles d'appartenance au groupe. Les ressources qui répondent aux critères de règle sont membres du groupe dynamique. Les règles de mise en correspondance ont une syntaxe spécifique que vous devez suivre. Reportez-vous à Ecriture de règles de mise en correspondance pour définir des groupes dynamiques.
- Principaux d'instance
- Fonctionnalité du service IAM permettant aux instances d'être des acteurs autorisés (ou des principaux) pour effectuer des actions sur les ressources de service. Chaque instance de calcul possède sa propre identité et est authentifiée à l'aide des certificats qui lui sont ajoutés. Ces certificats sont créés et affectés aux instances, et font également l'objet d'une rotation, le tout de façon automatique. Cela vous évite d'avoir à diffuser les informations d'identification aux hôtes et d'effectuer leur rotation.
Remarques concernant la sécurité
Tout utilisateur ayant accès à l'instance (via une connexion SSH) hérite automatiquement des privilèges octroyés à celle-ci. Avant d'accorder des droits d'accès à une instance à l'aide de cette procédure, assurez-vous que vous savez quels utilisateurs peuvent y accéder et qu'ils doivent être autorisés avec les droits d'accès accordés à l'instance.
Tous les principaux d'instance de calcul bénéficient du droit d'accès compartment_inspect
. Vous ne pouvez pas révoquer ce droit d'accès. Ce droit d'accès permet à l'instance d'effectuer l'opération ListCompartments dans la location afin d'extraire les informations suivantes :
- Noms de compartiment
- Descriptions de compartiment
- Balises de format libre appliquées aux compartiments
- Valeurs par défaut des balises automatiques appliquées aux compartiments. Ces balises, telles que CreatedBy et CreatedOn, se trouvent dans l'espace de noms Oracle-Tag et sont automatiquement ajoutées par Oracle.
Présentation du processus
Les étapes suivantes récapitulent le flux de processus permettant de configurer et d'utiliser des instances en tant que principaux. Les sections suivantes fournissent d'autres détails.
-
Créer un groupe dynamique. Dans la définition du groupe dynamique, vous fournissez les règles de mise en correspondance afin d'indiquer les instances autorisées à effectuer des appels d'API vers les services.
-
Créez une stratégie octroyant au groupe dynamique des droits d'accès aux services de votre location (ou compartiment).
-
Un développeur de votre organisation configure l'application créée avec le kit SDK Oracle Cloud Infrastructure pour effectuer l'authentification à l'aide du fournisseur de principaux d'instance. Le développeur déploie l'application et le kit SDK sur toutes les instances appartenant au groupe dynamique.
-
Le kit SDK déployé effectue des appels vers les API Oracle Cloud Infrastructure comme autorisé par la stratégie (sans avoir à configurer des informations d'identification d'API).
-
Pour chaque appel d'API effectué par une instance, le service Audit consigne l'événement, en enregistrant l'OCID de l'instance en tant que valeur de
principalId
dans le journal des événements. Pour plus d'informations, reportez-vous à Contenu d'un événement de journal d'audit.
Etapes pour permettre aux instances d'appeler des services
Pour permettre à une instance d'appeler des services, procédez comme suit :
Création d'un groupe dynamique et de règles de mise en correspondance
Ecriture de stratégies pour les groupes dynamiques
Configuration du kit SDK, de l'interface de ligne de commande ou de Terraform
Création d'un groupe dynamique et de règles de mise en correspondance
Reportez-vous à Gestion des groupes dynamiques.
Ecriture de stratégies pour les groupes dynamiques
Après avoir créé un groupe dynamique, vous devez créer des stratégies afin de lui permettre d'accéder aux services Oracle Cloud Infrastructure.
Les stratégies pour les groupes dynamiques suivent la syntaxe décrite dans Fonctionnement des stratégies. Consultez cette rubrique pour comprendre les fonctionnalités de base des stratégies.
La syntaxe permettant à un groupe dynamique d'accéder aux ressources d'un compartiment est la suivante :
Allow dynamic-group <dynamic_group_name> to <verb> <resource-type> in compartment <compartment_name>
La syntaxe permettant à un groupe dynamique d'accéder à une location est la suivante :
Allow dynamic-group <dynamic_group_name> to <verb> <resource-type> in tenancy
Voici quelques exemples de stratégie :
Pour autoriser un groupe dynamique (FrontEnd) à utiliser un équilibreur de charge dans un compartiment spécifique (ProjectA), suivez l'exemple ci-après :
Allow dynamic-group FrontEnd to use load-balancers in compartment ProjectA
Pour autoriser un groupe dynamique à lancer des instances dans un compartiment spécifique, suivez l'exemple ci-après :
Allow dynamic-group FrontEnd to manage instance-family in compartment ProjectA
Allow dynamic-group FrontEnd to use volume-family in compartment ProjectA
Allow dynamic-group FrontEnd to use virtual-network-family in compartment ProjectA
Pour obtenir d'autres exemples de stratégie, reportez-vous à Stratégies courantes.
Configuration du kit SDK, de l'interface de ligne de commande ou de Terraform
Pour plus d'informations sur les kits SDK, reportez-vous à Kits SDK et interface de ligne de commande.
Kit SDK pour Java :
Dans le kit SDK pour Java, créez un objet InstancePrincipalsAuthenticationDetailsProvider
. Par exemple :
public static void main(String[] args) throws Exception {
InstancePrincipalsAuthenticationDetailsProvider provider =
InstancePrincipalsAuthenticationDetailsProvider.builder().build();
IdentityClient identityClient = new IdentityClient(provider);
...
Pour le kit SDK Python :
Dans votre kit SDK Python, créez un objet oci.auth.signers.InstancePrincipalsSecurityTokenSigner
. Par exemple :
# By default this will hit the auth service in the region returned by http://169.254.169.254/opc/v1/instance/region on the instance.
signer = oci.auth.signers.InstancePrincipalsSecurityTokenSigner()
identity_client = oci.identity.IdentityClient(config={}, signer=signer)
...
Pour actualiser le jeton sans attendre, utilisez la commande suivante :
signer.refresh_security_token()
Activation de l'autorisation de principal d'instance pour l'interface de ligne de commande
Pour activer l'autorisation de principal d'instance à partir de l'interface de ligne de commande, vous pouvez définir l'option d'autorisation (--auth
) pour une commande. Par exemple :
oci os ns get --auth instance_principal
Vous pouvez également définir la variable d'environnement suivante :
OCI_CLI_AUTH=instance_principal
Si les deux sont définies, la valeur définie pour --auth
est prioritaire sur la variable d'environnement.
Pour plus d'informations sur l'interface de ligne de commande, reportez-vous à Utilisation de l'interface de ligne de commande.
Activation de l'autorisation de principal d'instance pour Terraform
Pour activer l'autorisation de principal d'instance dans Terraform, vous pouvez définir l'attribut auth
sur "InstancePrincipal" dans la définition de fournisseur, comme indiqué dans l'exemple suivant :
variable "region" {}
provider "oci" {
auth = "InstancePrincipal"
region = "${var.region}"
}
Lorsque vous utilisez l'autorisation de principal d'instance, vous n'avez pas besoin d'inclure les attributs tenancy_ocid
, user_ocid
, fingerprint
et private_key_path
.
Foire aux questions
Utilisez cette commande cURL : curl http://169.254.169.254/opc/v1/identity/cert.pem
Le certificat fait l'objet d'une rotation plusieurs fois par jour.
- Essayez d'exécuter à nouveau la commande. Parfois, la rotation du certificat et la demande se produisent en même temps.
- Le certificat a peut-être expiré. Vérifiez que le certificat est valide.
Non. Vous ne pouvez pas modifier la fréquence de rotation du certificat. Cependant, vous pouvez modifier la stratégie sur le groupe dynamique. Si vous pensez qu'une instance a été compromise, vous pouvez modifier la stratégie sur le groupe dynamique afin de révoquer les droits d'accès pour tous les membres du groupe, ou enlever l'instance du groupe dynamique. Reportez-vous à Puis-je enlever une instance d'un groupe dynamique ?
L'expiration du jeton est indépendante de la période d'expiration du certificat. De plus, elle dépend également de l'application avec laquelle vous interagissez. Par exemple, si Object Storage ne dispose pas d'opération PUT multipart, la durée d'exécution de l'opération n'a pas d'importance.
Oui. Assurez-vous que seuls les utilisateurs devant disposer de l'accès que vous avez accordé au groupe dynamique ont accès à l'instance.
Oui. Vous pouvez l'enlever en modifiant la règle de mise en correspondance afin de l'exclure. Reportez-vous à l'exemple ci-dessous.
Oui. Par exemple, supposons que vous voulez exclure deux instances spécifiques d'un compartiment du groupe dynamique. Ecrivez une règle de mise en correspondance comme suit :
All {instance.compartment.id = '<compartment_ocid>',
instance.id != '<instance1_to_exclude_ocid>', instance.id != '<instance2_to_exclude_ocid>'}
La règle ci-dessus inclut toutes les instances dans le compartiment, sauf celles ayant les OCID indiqués.