¿Cómo puedo implementar artefactos en Amazon S3 en otra cuenta de AWS mediante CodePipeline y una ACL predefinida?

6 minutos de lectura
0

Quiero implementar artefactos en un bucket de Amazon Simple Storage Service (Amazon S3) en otra cuenta. ¿Hay alguna forma de hacerlo mediante AWS CodePipeline con un proveedor de acciones de implementación de Amazon S3 y una lista de control de acceso (ACL) predefinida?

Resolución

Nota: El siguiente procedimiento parte del escenario siguiente:

  • Tiene dos cuentas de AWS: una de desarrollo y otra de producción.
  • El bucket de entrada de la cuenta de desarrollo se denomina codepipeline-input-bucket (con el control de versiones activado).
  • El bucket de artefactos predeterminado de la cuenta de desarrollo se denomina codepipeline-us-east-1-0123456789.
  • El bucket de salida de la cuenta de producción se denomina codepipeline-output-bucket.
  • Está implementando artefactos desde la cuenta de desarrollo en un bucket de S3 de la cuenta de producción.
  • Está utilizando una ACL predefinida para proporcionar al propietario del bucket de la cuenta de producción acceso a los objetos que pertenecen a la cuenta de desarrollo.
    Nota: Para implementar artefactos y configurar la cuenta de producción como propietaria del objeto, consulte ¿Cómo implemento artefactos en Amazon S3 en una cuenta diferente mediante CodePipeline?

Creación de una instancia de CodePipeline en la cuenta de desarrollo

1.    Abra la consola de CodePipeline. A continuación, elija Crear la canalización.

2.    En Nombre de la canalización, escriba un nombre para la canalización. Por ejemplo: crossaccountdeploy.

Nota: El cuadro de texto Nombre del rol se rellena automáticamente con el nombre del rol de servicio AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy. También puede elegir otro rol de servicio existente.

3.    Amplíe la sección Configuración avanzada.

4.    En Almacén de artefactos, elija Ubicación predeterminada.
Nota: Puede seleccionar una Ubicación personalizada si es necesario para su caso de uso.

5.    En Clave de cifrado, seleccione Clave predeterminada administrada por AWS.

6.    Elija Siguiente.

7.    En la página Agregar la etapa de origen, para Proveedor de origen, seleccione Amazon S3.

8.    En Bucket, escriba el nombre del bucket de S3 de entrada de desarrollo. Por ejemplo: codepipeline-input-bucket.
Importante: El bucket de entrada debe tener activado el control de versiones para funcionar con CodePipeline.

9.    En Clave de objeto de S3, escriba sample-website.zip.

Importante: Para usar un ejemplo de sitio web de AWS en lugar de su propio sitio web, consulte el Tutorial: Creación de una canalización que utilice Amazon S3 como proveedor de implementación. A continuación, busque "ejemplo de sitio web estático" en los requisitos previos de la sección 1: Implementación de archivos de sitios web estáticos en Amazon S3.

10.    En Cambiar las opciones de detección, elija Amazon CloudWatch Events (recomendado).

11.    Elija Siguiente.

12.    En la página Agregar la etapa de compilación, seleccione Omitir la etapa de compilación. A continuación, seleccione Omitir.

13.    En la página Agregar la etapa de implementación, para Proveedor de implementación, elija Amazon S3.

14.    En Región, elija la región de AWS en la que se encuentra el bucket de S3 de salida. Por ejemplo: Este de EE. UU. (Norte de Virginia).

15.    En Bucket, escriba el nombre del bucket de S3 de salida de producción. Por ejemplo: codepipeline-output-bucket.

16.    Seleccione la casilla Extraer el archivo antes de la implementación.
Nota: Si es necesario, introduzca una ruta para Ruta de implementación.

17.    Despliegue Configuración adicional.

18.    En ACL predefinida, elija bucket-owner-full-control.
Nota: La lista bucket-owner-full-control le da al propietario del bucket de la cuenta de producción acceso total a los objetos implementados y que son propiedad de la cuenta de desarrollo. Para obtener más información, consulte ACL predefinidas.

19.    Elija Siguiente.

20.    Elija Crear la canalización. La canalización se ejecuta, pero la etapa de origen falla. Aparece el siguiente error: "El objeto con la clave 'sample-website.zip' no existe".

En la sección Cargar el sitio web de ejemplo en el bucket de entrada de este artículo se describe cómo resolver este error.

Configure un rol de servicio de CodePipeline con una política de AWS Identity and Access Management (IAM) que añada acceso de S3 al bucket de salida de la cuenta de producción

1.    Abra la consola de IAM en la cuenta de desarrollo.

2.    En el panel de navegación, elija Políticas. A continuación, elija Crear política.

3.    Elija la pestaña JSON. A continuación, introduzca la siguiente política en el editor JSON:

Importante: Sustituya codepipeline-output-bucket por el nombre del bucket de S3 de salida de producción.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::codepipeline-output-bucket/*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::codepipeline-output-bucket"
    }
  ]
}

4.    Elija Revisar la política.

5.    En Nombre, escriba un nombre para la política. Por ejemplo: prodbucketaccess.

6.    Elija Crear política.

7.    En el panel de navegación, elija Roles.

8.    En la lista de roles, elija AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy. Este es el rol de servicio de CodePipeline.
Nota: Puede usar su propio rol de servicio, si es necesario para su caso práctico.

9.    Elija Asociar políticas.

10.    Seleccione la política que creó (prodbucketaccess). A continuación, elija Asociar política para conceder a CodePipeline acceso al bucket de S3 de salida de producción.

Configure el bucket de salida en la cuenta de producción para permitir el acceso desde la cuenta de desarrollo

1.    Abra la consola de Amazon S3 en la cuenta de producción.

2.    En la lista Nombre del bucket, elija el bucket de S3 de salida de producción. Por ejemplo: codepipeline-output-bucket.

3.    Elija Permisos. A continuación, elija Política de bucket.

4.    En el editor de texto, introduzca la siguiente política y, a continuación, elija Guardar:

Importante: Sustituya dev-account-id por el identificador de la cuenta de AWS del entorno de desarrollo. Sustituya codepipeline-output-bucket por el nombre del bucket de S3 de salida de producción.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::dev-account-id:root"
      },
      "Action": "s3:Put*",
      "Resource": "arn:aws:s3:::codepipeline-output-bucket/*"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::dev-account-id:root"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::codepipeline-output-bucket"
    }
  ]
}

Cargue el sitio web de ejemplo al bucket de entrada

1.    Abra la consola de Amazon S3 en la cuenta de desarrollo.

2.    En la lista Nombre del bucket, elija el bucket de S3 de salida de desarrollo. Por ejemplo: codepipeline-input-bucket.

3.    Elija Cargar. A continuación, elija Añadir archivos.

4.    Seleccione el archivo sample-website.zip que descargó.

5.    Seleccione Cargar para ejecutar la canalización. Cuando se ejecuta la canalización, ocurre lo siguiente:

  • La acción de origen selecciona el archivo sample-website.zip del bucket de S3 de entrada de desarrollo (codepipeline-input-bucket). A continuación, la acción de origen coloca el archivo ZIP como artefacto de origen dentro del depósito de artefactos predeterminado en la cuenta de desarrollo (codepipeline-us-east-1-0123456789).
  • En la acción de implementación, el rol de servicio AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy) utiliza su acceso para implementarse en el bucket de S3 de salida de producción (codepipeline-output-bucket). La acción de implementación también aplica bucket-owner-full-control de ACL predefinidas.

Nota: La cuenta de desarrollo es la propietaria de los objetos extraídos en el bucket de S3 de la salida de producción (codepipeline-output-bucket). El propietario del bucket de la cuenta de producción también tiene acceso total a los artefactos implementados.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año