Cómo usar funciones Lambda con Qumulo (Parte 2)

Esta es la entrada final de una serie de dos partes sobre cómo usar las funciones Lambda con Qumulo. En la parte 1, empaquetamos los enlaces de Python para la API de Qumulo y los cargamos en AWS Lambda como una capa. ¡Ahora, usemos esta capa!

Cómo crear una función Lambda para rotar la contraseña de administrador de un clúster

Hagamos una función Lambda para rotar la contraseña de administrador del clúster. usaremos Director de secretos de AWS, un servicio para administrar y almacenar credenciales, para rotar la contraseña de nuestro Qumulo.

Al aprovechar este servicio y la API de Qumulo, podemos programar cambios automáticos recurrentes en la contraseña de administrador de Qumulo. Luego, otros servicios pueden acceder a la contraseña de administrador actual a través de la API de AWS Secrets Manager.

Este libro de cocina utiliza AWS Lambda, IAM, AWS Secrets Manager y un Qumulo Cluster se ejecuta en AWS. Para empezar, reúne lo siguiente:

  • La contraseña de administrador de su clúster Qumulo
  • Una dirección IP para el cluster Qumulo
  • El ID de subred y el ID de grupo de seguridad que contiene el clúster Qumulo
  • El ARN de la capa Lambda creada en la primera publicación.

Cómo crear un secreto en AWS Secrets Manager para almacenar credenciales de clúster

Primero, creemos un secreto en AWS Secrets Manager para almacenar las credenciales del clúster de Qumulo. (Suponemos algunos nombres de variables y que esto se está ejecutando en la Región EE. UU. Oeste 2. Adapte estos valores a su entorno). Reemplace las cadenas en zanahorias con valores de su entorno.

1. Completa los espacios en blanco y ejecuta este comando:

aws secretsmanager create-secret --name "my-qumulo-credentials" --description "credenciales para mi clúster de qumulo" --secret-string '{"username":"admin", "password":"", "host" :"[ip de un nodo en el clúster]"}'

2. Anote el ARN del secreto de la salida para referencia posterior.

Crearemos una función Lambda para gestionar este secreto en un momento. Antes de hacerlo, debemos crear un rol de IAM que asumirá la función Lambda. Adjuntaremos permisos a este rol a medida que avancemos.

1. Ejecuta este comando:

aws iam create-role - nombre de rol QumuloSecretRotationRole --assume-role-policy-document '{"Version": "2012-10-17", "Statement": [{"Action": "sts: AssumeRole", "Efecto": "Permitir", "Principal": {"Servicio": "lambda.amazonaws.com"}}]} '

2. Tenga en cuenta el ARN del rol IAM creado para su posterior referencia.

La función Lambda necesitará acceso a AWS CloudWatch para cargar registros y la VPC del clúster de Qumulo para cambiar la contraseña de administrador. El papel 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