Comment utiliser les fonctions Lambda avec Qumulo (Partie 2)

Ceci est la dernière entrée d'une série en 2 parties sur comment utiliser les fonctions Lambda avec Qumulo. Dans la partie 1, nous avons empaqueté les liaisons python pour l'API Qumulo et les avons téléchargées sur AWS Lambda en tant que couche. Maintenant, utilisons ce calque !

Comment créer une fonction Lambda pour faire pivoter le mot de passe administrateur d'un cluster

Créons une fonction Lambda pour faire pivoter le mot de passe administrateur du cluster. Nous utiliserons AWS Secrets Manager, un service de gestion et de stockage des informations d'identification, pour faire pivoter le mot de passe de notre Qumulo.

En tirant parti de ce service et de l'API Qumulo, nous pouvons planifier des modifications automatiques et récurrentes du mot de passe administrateur Qumulo. D'autres services peuvent ensuite accéder au mot de passe administrateur actuel via l'API AWS Secrets Manager.

Ce livre de recettes utilise AWS Lambda, IAM, AWS Secrets Manager et un Qumulo Cluster s'exécutant dans AWS. Pour commencer, rassemblez les éléments suivants:

  • Le mot de passe administrateur de votre cluster Qumulo
  • Une adresse IP pour le cluster Qumulo
  • L'ID de sous-réseau et l'ID de groupe de sécurité contenant le cluster Qumulo
  • L'ARN de la couche Lambda créée dans le premier post

Comment créer un secret dans AWS Secrets Manager pour stocker les informations d'identification du cluster

Commençons par créer un secret dans AWS Secrets Manager pour stocker les informations d'identification du cluster Qumulo. (Nous supposons que certains noms de variables sont exécutés dans la région USA Ouest 2. Adaptez ces valeurs à votre environnement.) Remplacez les chaînes dans les carottes par les valeurs de votre environnement.

1. Remplissez les blancs et lancez cette commande:

aws secretsmanager create-secret --name "my-qumulo-credentials" --description "informations d'identification pour mon cluster qumulo" --secret-string '{"username":"admin", "password":"", "host" :"[ip d'un nœud dans le cluster]"}'

2. Notez l'ARN du secret de la sortie pour référence ultérieure.

Nous allons créer une fonction Lambda pour gérer ce secret dans un instant. Avant de faire cela, nous devons créer un rôle IAM que la fonction Lambda assumera. Nous attacherons des autorisations à ce rôle au fur et à mesure.

1. Exécutez cette commande:

aws iam create-role - nom_rôle QumuloSecretRotationRole --assume-role-policy-document '{"Version": "2012-10-17", "Instruction": [{"Action": "sts: AssumeRole", "Effet": "Autoriser", "Principal": {"Service": "lambda.amazonaws.com"}}]} '

2. Notez l'ARN du rôle IAM créé pour référence ultérieure.

La fonction Lambda aura besoin d'accéder à AWS CloudWatch pour charger les journaux et au VPC du cluster Qumulo pour modifier le mot de passe administrateur. Le rôle AWSLambdaVPCAccessExecutionRole is perfect for this situation.

1. Run this command:

aws iam attach-role-policy --role-name QumuloSecretRotationRole --policy-arn "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"

Create the lambda function from the sample on the Qumulo Github. We configure the Lambda function to use the Lambda Layer created in the first post. The function implements Secret Manager's rotation workflow.

1. git clone https://github.com/Qumulo/cloud-samples.git
2. cd lambda
3. zip ./qumulo_secret_rotation_lambda.zip ./qumulo_secret_rotation_lambda.py
4. Run this command:

aws lambda create-function --function-name "QumuloAdminPasswordRotationFunction" --runtime "python2.7" --handler "qumulo_secret_rotation_lambda.lambda_handler" --zip-file fileb://qumulo_rotation_lambda.zip --layers "[Qumulo API Layer ARN]" --vpc-config "SubnetIds=[Qumulo's subnet],SecurityGroupIds=[Qumulo's security group]" --timeout 30 --description "Rotate a Qumulo Cluster's Admin password" --publish --environment "Variables={SECRETS_MANAGER_ENDPOINT=https://secretsmanager.us-west-2.amazonaws.com}" --role "[IAM role ARN]"

5. Note the lambda function ARN for later reference.

The AWS Secrets Manager service must be given permission to invoke our Lambda function. Run this command:

aws lambda add-permission --function-name "[lambda function ARN]" --statement-id SecretsManagerInvocation --principal "secretsmanager.amazonaws.com" --action "lambda:InvokeFunction"

Now that we've created a Lambda function, we can grant it permission to change the Qumulo secret. We want users of this function to only be able to change the secret via the function, which we accomplish by specifying the ARN of the function in the policy. After this step, all the needed permissions to call our lambda function and have it do its job should be configured.

1. Edit qumulo-lambda-samples/qumulo_secret_rotation_policy.json by replacing with the one noted above.
2. Run this command:

aws iam put-role-policy --role-name QumuloSecretRotationRole --policy-name "QumuloSecretRotationPolicy" --policy-document file://qumulo_secret_rotation_policy.json

Now that we have a secret, function, and permissions configured, we can associate the lambda function with the secret and enable automated rotation.

Run this command:

aws secretsmanager rotate-secret --secret-id "" --rotation-lambda-arn "[lambda function ARN]" --rotation-rules "AutomaticallyAfterDays=30"

A rotation was triggered automatically. Give it a minute to finish and then check secrets manager to see the new password (or CloudWatch logs to see any issues). This command will retrieve the secret:

aws secretsmanager get-secret-value --secret-id "[secret ARN]"

Now your Qumulo password is in a safe place and changed regularly!

In a future post, we will use S3 notifications and the Qumulo API to write a Lambda function that copies files to Qumulo when they appear in an S3 bucket. We'll make use of the secret created here to programmatically log into the cluster to upload files.

Share this post