Registrar un Hook personalizado con AWS CloudFormation - AWS CloudFormation

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Registrar un Hook personalizado con AWS CloudFormation

Una vez que hayas creado un Hook personalizado, tendrás que registrarlo AWS CloudFormation para poder usarlo. En esta sección, aprenderás a empaquetar y registrar tu Hook para usarlo en tu Cuenta de AWS.

Package a Hook (Java)

Si has desarrollado tu Hook con Java, usa Maven para empaquetarlo.

En el directorio de tu proyecto Hook, ejecuta el siguiente comando para compilar tu Hook, ejecuta pruebas unitarias y empaqueta tu proyecto como un JAR archivo que puedas usar para enviar tu Hook al CloudFormation registro.

mvn clean package

Registra un Hook personalizado

Para registrar un Hook
  1. (Opcional) Configure su Región de AWS nombre predeterminado paraus-west-2, enviando el configureoperación.

    $ aws configure AWS Access Key ID [None]: <Your Access Key ID> AWS Secret Access Key [None]: <Your Secret Key> Default region name [None]: us-west-2 Default output format [None]: json
  2. (Opcional) El siguiente comando compila y empaqueta tu proyecto Hook sin registrarlo.

    $ cfn submit --dry-run
  3. Registra tu Hook usando el CloudFormation CLI submitoperación.

    $ cfn submit --set-default

    El comando devuelve el siguiente comando:

    {‘ProgressStatus’: ‘COMPLETE’}

    Resultados: Has registrado correctamente tu Hook.

Verificación de que los Hooks estén accesibles en tu cuenta

Comprueba que tu Hook esté disponible en tu región Cuenta de AWS y en las regiones a las que lo has enviado.

  1. Para verificar tu Hook, usa el list-typescomando para enumerar tu Hook recién registrado y devolver una descripción resumida del mismo.

    $ aws cloudformation list-types

    El comando devuelve el siguiente resultado y también te mostrará los Hooks disponibles públicamente que puedes activar en tu región Cuenta de AWS y en tu región.

    { "TypeSummaries": [ { "Type": "HOOK", "TypeName": "MyCompany::Testing::MyTestHook", "DefaultVersionId": "00000001", "TypeArn": "arn:aws:cloudformation:us-west-2:ACCOUNT_ID/type/hook/MyCompany-Testing-MyTestHook", "LastUpdated": "2021-08-04T23:00:03.058000+00:00", "Description": "Verifies S3 bucket and SQS queues properties before creating or updating" } ] }
  2. Recupera el TypeArn archivo de list-type salida de tu Hook y guárdalo.

    export HOOK_TYPE_ARN=arn:aws:cloudformation:us-west-2:ACCOUNT_ID/type/hook/MyCompany-Testing-MyTestHook

Para obtener información sobre cómo publicar Hooks para uso público, consultePublicar ganchos para uso público.

Configurar Hooks

Una vez que hayas desarrollado y registrado tu Hook, puedes configurarlo en tu Hook Cuenta de AWS publicándolo en el registro.

  • Para configurar un Hook en tu cuenta, usa el SetTypeConfigurationoperación. Esta operación habilita las propiedades del enlace que se definen en la sección properties del esquema del enlace. En el siguiente ejemplo, la minBuckets propiedad se establece 1 en la configuración.

    nota

    Al habilitar Hooks en tu cuenta, autorizas a un Hook a usar los permisos definidos por ti Cuenta de AWS. CloudFormation elimina los permisos no necesarios antes de pasarlos al Hook. CloudFormation recomienda a los clientes o usuarios de Hook que revisen los permisos de Hook y sepan qué permisos tienen los Hooks antes de habilitar los Hooks en su cuenta.

    Especifica los datos de configuración de tu extensión Hook registrada en la misma cuenta y Región de AWS.

    $ aws cloudformation set-type-configuration --region us-west-2 --configuration '{"CloudFormationConfiguration":{"HookConfiguration":{"HookInvocationStatus":"ENABLED","FailureMode":"FAIL","Properties":{"minBuckets": "1","minQueues": "1", "encryptionAlgorithm": "aws:kms"}}}}' --type-arn $HOOK_TYPE_ARN
    importante

    Para que tu Hook pueda inspeccionar de forma proactiva la configuración de tu pila, debes HookInvocationStatus establecer el valor ENABLED en la HookConfiguration sección una vez que el Hook se haya registrado y activado en tu cuenta.

Acceder a AWS APIs los controladores

Si tus Hooks utilizan un AWS API en alguno de sus controladores, el CFN - crea CLI automáticamente una plantilla de roles de IAM ejecución,. hook-role.yaml La hook-role.yaml plantilla se basa en los permisos especificados para cada controlador en la sección correspondiente al controlador del esquema de Hook. Si la --role-arn bandera no se utiliza durante el generateoperación, la función de esta pila se aprovisionará y se utilizará como función de ejecución del Hook.

Para obtener más información, consulta Acceder AWS APIs desde un tipo de recurso.

plantilla hook-role.yaml

nota

Si opta por crear su propio rol de ejecución, le recomendamos encarecidamente que practique el principio del privilegio mínimo al permitir publicar solo y. hooks.cloudformation.amazonaws.com resources.cloudformation.amazonaws.com

La siguiente plantilla utiliza IAM los SQS permisos Amazon S3 y Amazon.

AWSTemplateFormatVersion: 2010-09-09 Description: > This CloudFormation template creates a role assumed by CloudFormation during Hook operations on behalf of the customer. Resources: ExecutionRole: Type: 'AWS::IAM::Role' Properties: MaxSessionDuration: 8400 AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - resources.cloudformation.amazonaws.com - hooks.cloudformation.amazonaws.com Action: 'sts:AssumeRole' Condition: StringEquals: aws:SourceAccount: !Ref AWS::AccountId StringLike: aws:SourceArn: !Sub arn:${AWS::Partition}:cloudformation:${AWS::Region}:${AWS::AccountId}:type/hook/MyCompany-Testing-MyTestHook/* Path: / Policies: - PolicyName: HookTypePolicy PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - 's3:GetEncryptionConfiguration' - 's3:ListBucket' - 's3:ListAllMyBuckets' - 'sqs:GetQueueAttributes' - 'sqs:GetQueueUrl' - 'sqs:ListQueues' Resource: '*' Outputs: ExecutionRoleArn: Value: !GetAtt - ExecutionRole - Arn