¿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) de otra cuenta mediante AWS CodePipeline con un proveedor de acciones de implementación de Amazon S3 y una lista de control de acceso (ACL) preconfigurada.

Solución

Nota: El siguiente procedimiento parte del escenario siguiente:

  • Tienes 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ás implementando artefactos desde la cuenta de desarrollo en un bucket de S3 de la cuenta de producción.
  • Estás 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, consulta ¿Cómo puedo desplegar artefactos en Amazon S3 en otra cuenta de AWS mediante CodePipeline?

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

1.    Abre la consola de CodePipeline. A continuación, selecciona Crear canalización.

2.    En Nombre de canalización, introduce un nombre para tu 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 puedes elegir otro rol de servicio existente.

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

4.    En Almacén de artefactos, elige Ubicación predeterminada.
Nota: Puedes seleccionar una Ubicación personalizada si es necesario para tu caso de uso.

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

6.    Elige Siguiente.

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

8.    En Bucket, introduce el nombre de su bucket 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.    Para la clave de objeto S3, escribe sample-website.zip.

Importante: Para usar un ejemplo de sitio web de AWS en lugar de tu propio sitio web, consulta Tutorial: Create a pipeline that uses Amazon S3 as a deployment provider (Tutorial: Creación de una canalización que utilice Amazon S3 como proveedor de implementación). A continuación, busca «ejemplo de sitio web estático» en los requisitos previos de la sección 1: Despliega archivos de sitios web estáticos en la sección Amazon S3.

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

11.    Elige Siguiente.

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

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

14.    En Región, elige 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, escribe el nombre del bucket de S3 de salida de producción. Por ejemplo: codepipeline-output-bucket.

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

17.    Despliega Configuración adicional.

18.    En ACL predefinida, selecciona 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, consulta ACL predefinidas.

19.    Elige Siguiente.

20.    Elige Crear la canalización. La canalización se ejecuta, pero se produce un error en la etapa de origen. 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.

Configura 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.    Abre la consola de IAM en la cuenta de desarrollo.

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

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

Importante: Reemplaza codepipeline-output-bucket por el nombre del bucket de S3 de tu 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.    Elige Revisar la política.

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

6.    Elige Crear política.

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

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

9.    Elige Asociar políticas.

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

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

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

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

3.    Selecciona Permisos. A continuación, elige Política de bucket.

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

Importante: Sustituye dev-account-id por el identificador de la cuenta de AWS del entorno de desarrollo. Sustituye 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"
    }
  ]
}

Carga el sitio web de ejemplo al bucket de entrada

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

2.    En la lista de nombres de buckets, elige tu bucket de S3 de entrada de desarrollo. Por ejemplo: codepipeline-input-bucket.

3.    Selecciona Cargar. A continuación, selecciona Añadir archivos.

4.    Selecciona el archivo sample-website.zip que descargaste.

5.    Selecciona 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 tu 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 6 meses