18.13. Tutoriel : Intégrer avec AWS Services
Bien que l’application OSToy fonctionne indépendamment, de nombreuses applications du monde réel nécessitent des services externes tels que des bases de données, des magasins d’objets ou des services de messagerie.
Les objectifs
- Découvrez comment intégrer l’application OSToy à d’autres services Amazon Web Services (AWS), en particulier AWS S3 Storage. À la fin de cette section, l’application créera et lira en toute sécurité des objets à partir d’AWS S3 Storage.
- Faites appel au contrôleur Amazon pour Kubernetes (ACK) pour créer les services nécessaires à notre application directement à partir de Kubernetes.
- Les rôles de gestion de l’identité et de l’accès (IAM) sont utilisés pour les comptes de service pour gérer l’accès et l’authentification.
- Créez un fichier texte de base et enregistrez-le dans un seau S3.
- Confirmez que le fichier a été ajouté avec succès et peut être lu à partir du seau.
18.13.1. Contrôleur Amazon pour Kubernetes (ACK) Copier lienLien copié sur presse-papiers!
L’ACK permet de créer et d’utiliser les services AWS directement à partir de Kubernetes. Il est possible de déployer vos applications directement dans le framework Kubernetes en utilisant une structure familière pour définir et créer des services AWS tels que S3 buckets ou Relational Database Service (RDS).
Avec ACK, vous pouvez créer un seau S3, l’intégrer à l’application OSToy, y télécharger un fichier et afficher le fichier dans votre application.
18.13.2. IAM rôles pour les comptes de service Copier lienLien copié sur presse-papiers!
Il est possible d’utiliser les rôles IAM pour les comptes de service pour attribuer des rôles IAM directement aux comptes de service Kubernetes. Il est possible de l’utiliser pour autoriser le contrôleur ACK à déployer des services sur votre compte AWS. Les rôles IAM pour les comptes de service permettent d’automatiser la gestion et la rotation des informations d’identification temporaires.
Les pods reçoivent un jeton Web JSON (OIDC) valide et le transmettent à l’opération AWS STS AssumeRoleWithWebIdentity API pour recevoir des informations d’identification de rôle temporaires IAM. Le processus repose sur l’identité de la pod EKS mutant le webhook qui modifie les pods nécessitant un accès AWS IAM.
Les rôles de l’IAM pour les comptes de services respectent les meilleures pratiques suivantes:
- Le principe du moindre privilège : Vous pouvez créer des autorisations IAM pour les rôles AWS qui n’autorisent qu’un accès limité. Ces autorisations sont limitées au compte de service associé au rôle et seuls les pods qui utilisent ce compte de service ont accès.
- Isolation d’identification: Un pod ne peut récupérer que des informations d’identification pour le rôle IAM associé au compte de service que le pod utilise.
- Audit : Tous les accès aux ressources AWS peuvent être consultés dans CloudTrail.
18.13.3. Installation du contrôleur ACK Copier lienLien copié sur presse-papiers!
Installez le contrôleur ACK pour créer et supprimer des seaux dans le service S3 en utilisant une ressource personnalisée Kubernetes pour le seau. L’installation du contrôleur créera également l’espace de noms et le compte de service requis.
« nous utiliserons un opérateur pour faciliter la tâche. L’installation de l’opérateur créera également un espace de noms ack-system et un contrôleur de compte de service pour vous.
- Connectez-vous à la console de cluster.
- Dans le menu de gauche, cliquez sur Opérateurs, puis OperatorHub.
Dans la zone de filtre, entrez "S3" et sélectionnez AWS Controller pour Kubernetes - Amazon S3.
- En cas d’apparition d’une pop-up sur les opérateurs communautaires, cliquez sur Continuer.
- Cliquez sur Install.
- Choisissez Tous les espaces de noms du cluster sous « Mode d’installation ».
- Choisissez ack-system sous "Installed Namespace".
Choisissez le manuel sous la rubrique « Mise à jour de l’approbation ».
ImportantAssurez-vous que le mode manuel est sélectionné afin que les modifications apportées au compte de service ne soient pas écrasées par une mise à jour automatique de l’opérateur.
Cliquez sur Install.
Les paramètres devraient ressembler à l’image ci-dessous.
- Cliquez sur Approuver.
- L’installation commence mais ne sera pas terminée tant que vous n’avez pas créé un rôle et une politique IAM pour le contrôleur ACK.
18.13.4. Créer un rôle et une politique IAM pour le contrôleur ACK Copier lienLien copié sur presse-papiers!
Exécutez l’un des scripts suivants pour créer le rôle AWS IAM pour le contrôleur ACK et assigner la stratégie S3:
- Automatiquement télécharger le script setup-s3-ack-controller.sh, qui automatise le processus pour vous.
Exécutez le script suivant dans votre interface de ligne de commande (CLI):
curl https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/resources/setup-s3-ack-controller.sh | bash
$ curl https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/resources/setup-s3-ack-controller.sh | bashCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- Lorsque le script est terminé, il redémarre le déploiement qui met à jour les pods du contrôleur de service avec les rôles IAM pour les variables d’environnement des comptes de service.
Confirmez que les variables d’environnement sont définies en exécutant la commande suivante:
oc describe pod ack-s3-controller -n ack-system | grep "^\s*AWS_"
$ oc describe pod ack-s3-controller -n ack-system | grep "^\s*AWS_"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
AWS_ROLE_ARN: arn:aws:iam::000000000000:role/ack-s3-controller AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
AWS_ROLE_ARN: arn:aws:iam::000000000000:role/ack-s3-controller AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/tokenCopy to Clipboard Copied! Toggle word wrap Toggle overflow Confirmez la configuration réussie du contrôleur ACK dans la console Web en cliquant sur Opérateurs, puis sur les opérateurs installés.
Lorsque vous ne voyez pas une installation réussie de l’opérateur et les variables d’environnement, redémarrez manuellement le déploiement en exécutant la commande suivante:
oc rollout restart deployment ack-s3-controller -n ack-system
$ oc rollout restart deployment ack-s3-controller -n ack-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.5. Configuration de l’accès pour l’application Copier lienLien copié sur presse-papiers!
Il est possible de créer un compte de rôle et de service AWS IAM afin que OSToy puisse lire et écrire des objets dans un seau S3.
Créez un nouveau projet unique pour OSToy en exécutant la commande suivante:
oc new-project ostoy-$(uuidgen | cut -d - -f 2 | tr '[:upper:]' '[:lower:]')
$ oc new-project ostoy-$(uuidgen | cut -d - -f 2 | tr '[:upper:]' '[:lower:]')Copy to Clipboard Copied! Toggle word wrap Toggle overflow Enregistrez le nom de l’espace de noms et du projet dans une variable d’environnement en exécutant la commande suivante:
export OSTOY_NAMESPACE=$(oc config view --minify -o 'jsonpath={..namespace}')$ export OSTOY_NAMESPACE=$(oc config view --minify -o 'jsonpath={..namespace}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.6. Créer un rôle AWS IAM Copier lienLien copié sur presse-papiers!
Bénéficiez de l’ID de votre compte AWS en exécutant la commande suivante:
export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
$ export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Obtenez le fournisseur OIDC en exécutant la commande suivante, en remplaçant <cluster-name> par le nom de votre cluster:
export OIDC_PROVIDER=$(rosa describe cluster -c <cluster-name> -o yaml | awk '/oidc_endpoint_url/ {print $2}' | cut -d '/' -f 3,4)$ export OIDC_PROVIDER=$(rosa describe cluster -c <cluster-name> -o yaml | awk '/oidc_endpoint_url/ {print $2}' | cut -d '/' -f 3,4)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez le fichier de stratégie de confiance en exécutant la commande suivante:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez le rôle AWS IAM à utiliser avec votre compte de service en exécutant la commande suivante:
aws iam create-role --role-name "ostoy-sa-role" --assume-role-policy-document file://ostoy-sa-trust.json
$ aws iam create-role --role-name "ostoy-sa-role" --assume-role-policy-document file://ostoy-sa-trust.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.7. Attacher la politique S3 au rôle de l’IAM Copier lienLien copié sur presse-papiers!
Bénéficiez de la stratégie d’accès complet S3 ARN en exécutant la commande suivante:
export POLICY_ARN=$(aws iam list-policies --query 'Policies[?PolicyName==`AmazonS3FullAccess`].Arn' --output text)
$ export POLICY_ARN=$(aws iam list-policies --query 'Policies[?PolicyName==`AmazonS3FullAccess`].Arn' --output text)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Attachez la stratégie au rôle AWS IAM en exécutant la commande suivante:
aws iam attach-role-policy --role-name "ostoy-sa-role" --policy-arn "${POLICY_ARN}"$ aws iam attach-role-policy --role-name "ostoy-sa-role" --policy-arn "${POLICY_ARN}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.8. Créer le compte de service pour votre pod Copier lienLien copié sur presse-papiers!
Bénéficiez de l’ARN pour le rôle AWS IAM que nous avons créé afin qu’il soit inclus comme annotation lorsque vous créez votre compte de service en exécutant la commande suivante:
export APP_IAM_ROLE_ARN=$(aws iam get-role --role-name=ostoy-sa-role --query Role.Arn --output text)
$ export APP_IAM_ROLE_ARN=$(aws iam get-role --role-name=ostoy-sa-role --query Role.Arn --output text)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez le compte de service en exécutant la commande suivante:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ImportantIl ne faut pas changer le nom du compte de service de "ostoy-sa" ou vous devrez modifier la relation de confiance pour le rôle AWS IAM.
Accordez au compte de service le rôle restreint en exécutant la commande suivante:
oc adm policy add-scc-to-user restricted system:serviceaccount:${OSTOY_NAMESPACE}:ostoy-sa$ oc adm policy add-scc-to-user restricted system:serviceaccount:${OSTOY_NAMESPACE}:ostoy-saCopy to Clipboard Copied! Toggle word wrap Toggle overflow Confirmez que l’annotation a été couronnée de succès en exécutant la commande suivante:
oc describe serviceaccount ostoy-sa -n ${OSTOY_NAMESPACE}$ oc describe serviceaccount ostoy-sa -n ${OSTOY_NAMESPACE}Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.9. Créer un seau S3 Copier lienLien copié sur presse-papiers!
Créez un seau S3 à l’aide d’un fichier manifeste en exécutant la commande suivante:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ImportantL’application OSToy s’attend à trouver un seau nommé <namespace>-bucket. Lorsque vous utilisez autre chose que l’espace de noms de votre projet OSToy, cette fonctionnalité ne fonctionnera pas. Ainsi, si notre projet est "ostoy", la valeur du nom doit être ostoy-bucket.
Confirmez que le seau a été créé en exécutant la commande suivante:
aws s3 ls | grep ${OSTOY_NAMESPACE}-bucket$ aws s3 ls | grep ${OSTOY_NAMESPACE}-bucketCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.10. Le redéploiement de l’application OSToy avec le nouveau compte de service Copier lienLien copié sur presse-papiers!
- Exécutez votre pod avec le compte de service que vous avez créé.
Déployez le microservice en exécutant la commande suivante:
- oc apply -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/ostoy-microservice-deployment.yaml
$ - oc apply -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/ostoy-microservice-deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Déployez l’ostoy-frontend en exécutant la commande suivante:
- oc apply -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/ostoy-frontend-deployment.yaml
$ - oc apply -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/ostoy-frontend-deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Corrigez le déploiement ostoy-frontend en exécutant la commande suivante:
oc patch deploy ostoy-frontend -n ${OSTOY_NAMESPACE} --type=merge --patch '{"spec": {"template": {"spec":{"serviceAccount":"ostoy-sa"}}}}'$ oc patch deploy ostoy-frontend -n ${OSTOY_NAMESPACE} --type=merge --patch '{"spec": {"template": {"spec":{"serviceAccount":"ostoy-sa"}}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Attendez que le pod soit mis à jour.
18.13.11. Confirmation des variables d’environnement Copier lienLien copié sur presse-papiers!
La commande suivante permet de décrire les pods et de vérifier l’existence de variables d’environnement AWS_WEB_IDENTITY_TOKEN_FILE et AWS_ROLE_ARN pour notre application:
oc describe pod ostoy-frontend -n ${OSTOY_NAMESPACE} | grep "^\s*AWS_"$ oc describe pod ostoy-frontend -n ${OSTOY_NAMESPACE} | grep "^\s*AWS_"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
AWS_ROLE_ARN: arn:aws:iam::000000000000:role/ostoy-sa AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
AWS_ROLE_ARN: arn:aws:iam::000000000000:role/ostoy-sa AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/tokenCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.12. Affichage du contenu du seau à travers OSToy Copier lienLien copié sur presse-papiers!
Consultez votre application pour afficher le contenu de votre seau S3.
Accédez à l’itinéraire de l’application nouvellement déployée en exécutant la commande suivante:
oc get route ostoy-route -n ${OSTOY_NAMESPACE} -o jsonpath='{.spec.host}{"\n"}'$ oc get route ostoy-route -n ${OSTOY_NAMESPACE} -o jsonpath='{.spec.host}{"\n"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ouvrez un nouvel onglet du navigateur et entrez l’itinéraire obtenu à l’étape précédente.
ImportantAssurez-vous d’utiliser http:// et non https://.
- Cliquez sur ACK S3 dans le menu de gauche dans OSToy.
Comme il s’agit d’un nouveau seau, le seau doit être vide.
18.13.13. Créer des fichiers dans votre seau S3 Copier lienLien copié sur presse-papiers!
Faites appel à OStoy pour créer un fichier et le télécharger sur le seau S3. Bien que S3 puisse accepter n’importe quel type de fichier, pour ce tutoriel, utilisez des fichiers texte afin que le contenu puisse facilement être rendu dans le navigateur.
- Cliquez sur ACK S3 dans le menu de gauche dans OSToy.
- Faites défiler vers le bas pour télécharger un fichier texte vers S3.
- Entrez un nom de fichier pour votre fichier.
- Entrez le contenu de votre fichier.
Cliquez sur Créer un fichier.
- Faites défiler la section supérieure pour les fichiers existants et confirmez que le fichier que vous venez de créer est là.
Cliquez sur le nom du fichier pour afficher le fichier.
Confirmez avec AWS CLI en exécutant la commande suivante pour répertorier le contenu de votre seau:
aws s3 ls s3://${OSTOY_NAMESPACE}-bucket$ aws s3 ls s3://${OSTOY_NAMESPACE}-bucketCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
aws s3 ls s3://ostoy-bucket
$ aws s3 ls s3://ostoy-bucket 2023-05-04 22:20:51 51 OSToy.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow