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.
Cree una canalización en la CodePipeline que se utilicen los recursos de otra AWS inscrita
Puede ser conveniente crear una canalización que use recursos creados o administrados por otra cuenta de AWS . Por ejemplo, podría ser conveniente usar una cuenta para una canalización y otra para los recursos de CodeDeploy .
nota
Al crear una canalización con acciones de varias cuentas, debe configurar sus acciones para que puedan obtener acceso a los artefactos en las limitaciones de las canalizaciones entre cuentas. Las siguientes limitaciones se aplican a las acciones entre cuentas:
-
En general, una acción solo puede consumir un artefacto si:
-
La acción está en la misma cuenta que la cuenta de canalización, o
-
El artefacto se creó en la cuenta de la canalización para una acción en otra cuenta, o
-
El artefacto se produjo por una acción anterior en la misma cuenta que la acción
En otras palabras, no puede pasar un artefacto de una cuenta a otra si ninguna de las dos cuentas es la de canalización.
-
-
Cross-account las acciones no son compatibles con los siguientes tipos de acción:
-
Acciones de compilación Jenkins
-
En este ejemplo, debes crear una clave AWS Key Management Service (AWS KMS) para usarla, agregar la clave a la canalización y configurar las políticas y funciones de la cuenta para permitir el acceso entre cuentas. Para una clave de AWS KMS, puedes usar el ID de la clave, el ARN de la clave o el ARN del alias.
nota
Los alias se reconocen únicamente en la cuenta que ha creado la clave de KMS. Para las acciones entre cuentas, solo puedes usar el ID de la clave o el ARN de la clave para identificar la clave. Cross-account las acciones implican usar el rol de la otra cuenta (AccountB), por lo que al especificar el ID de la clave se utilizará la clave de la otra cuenta (AccountB).
En este tutorial y sus ejemplos, AccountA se muestra la cuenta que se usó originalmente para crear la canalización. Tiene acceso al bucket de Amazon S3 que se utiliza para almacenar los artefactos de la canalización y al rol de servicio que utiliza. AWS CodePipelineAccountBes la cuenta utilizada originalmente para crear la CodeDeploy aplicación, el grupo de implementación y el rol de servicio utilizados por CodeDeploy.
AccountAPara editar una canalización para usar la CodeDeploy aplicación creada porAccountB, AccountA debes:
-
Solicita el ARN o el ID de la cuenta de
AccountB(en este tutorial, elAccountBID es012ID_ACCOUNT_B). -
Cree o utilice una clave gestionada por el AWS KMS cliente en la región para la canalización y conceda permisos para usar esa clave para el rol de servicio (
CodePipeline_Service_Role) y.AccountB -
Cree una política de bucket de Amazon S3 que conceda
AccountBacceso al bucket de Amazon S3 (por ejemplo,codepipeline-us-east-2-1234567890). -
Cree una política que permita
AccountAasumir un rol configurado porAccountBy adjunte esa política al rol de servicio (CodePipeline_Service_Role). -
Edite la canalización para usar la AWS KMS clave gestionada por el cliente en lugar de la clave predeterminada.
AccountBPara permitir el acceso a sus recursos a una canalización creada enAccountA, AccountB debe:
-
Solicita el ARN o el ID de la cuenta de
AccountA(en este tutorial, elAccountAID es012ID_ACCOUNT_A). -
Cree una política aplicada al rol de instancia de Amazon EC2 configurado para el CodeDeploy que permita el acceso al bucket de Amazon S3 ().
codepipeline-us-east-2-1234567890 -
Cree una política aplicada al rol de instancia de Amazon EC2 configurado para el CodeDeploy que permita el acceso a la clave gestionada por el AWS KMS cliente que se utiliza para cifrar los artefactos de la canalización.
AccountA -
Configure y asocie un rol de IAM (
CrossAccount_Role) con una política de relaciones de confianza que permita al rol de CodePipeline servicioAccountAasumir el rol. -
Cree una política que permita el acceso a los recursos de implementación que requiere la canalización y adjúntela a
CrossAccount_Role. -
Cree una política que permita el acceso al bucket de Amazon S3 (
codepipeline-us-east-2-1234567890) y adjúntela aCrossAccount_Role.
Temas
Requisito previo: crear un AWS KMS clave de cifrado
Customer-managed las claves son específicas de una región, al igual que todas AWS KMS las claves. Debes crear tu AWS KMS clave gestionada por el cliente en la misma región en la que se creó la canalización (por ejemplo,us-east-2).
Para crear una clave gestionada por el cliente en AWS KMS
-
Inicia sesión en Consola de administración de AWS con
AccountAy abre la AWS KMS consola. -
A la izquierda, seleccione Claves administradas por el cliente.
-
Elija Crear clave. En la Configurar clave, deje el valor predeterminado Simétrico seleccionado y elija Siguiente.
-
En Alias, introduce el alias que quieras usar para esta clave (por ejemplo,
PipelineName-Key). Opcionalmente, proporcione una descripción y las etiquetas de esta clave; después, elija Paso siguiente. -
En Definir permisos de administración de claves, elija su usuario de y cualesquiera otros usuarios o grupos que desee que actúen como administradores de esta clave y, a continuación, elija Siguiente.
-
En Definir los permisos de uso de claves, en Esta cuenta, seleccione el nombre del rol de servicio para la canalización (por ejemplo, CodePipeline _Service_Role). En Otras AWS cuentas, elige Agregar otra AWS cuenta. Introduce el identificador de la cuenta
AccountBpara completar el ARN y, a continuación, selecciona Siguiente. -
En Revisar y editar política de claves, revise la política y, después, elija Terminar.
-
En la lista de claves, elija el alias de la clave y copie su ARN (por ejemplo,
). Lo necesitará cuando edite la canalización y configure las políticas.arn:aws:kms:us-east-2:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
Paso 1: Configurar roles y políticas de cuenta
Después de crear la AWS KMS clave, debe crear y adjuntar políticas que permitan el acceso multicuenta. Esto requiere acciones tanto por parte de comoAccountA. AccountB
Temas
Configure las políticas y los roles en la cuenta que creará la canalización (Cuenta A)
Para crear una canalización que utilice CodeDeploy los recursos asociados a otra AWS cuenta, AccountA debe configurar políticas tanto para el bucket de Amazon S3 que se utiliza para almacenar artefactos como para el rol de servicio para CodePipeline.
Para crear una política para el bucket de Amazon S3 que concede acceso a AccountB (consola)
-
Inicie sesión en la consola Consola de administración de AWS de Amazon S3
AccountAy ábrala en https://console.aws.amazon.com/s3/. -
En la lista de buckets de Amazon S3, elija el bucket de Amazon S3 en el que se almacenan los artefactos para la canalización. Este bucket tiene un nombre
codepipeline-, donderegion-1234567EXAMPLEregioncorresponde a la AWS región en la que creaste la canalización y1234567EXAMPLEes un número aleatorio de diez dígitos que garantiza que el nombre del bucket sea único (por ejemplo,codepipeline-us-east-2-1234567890). -
En la página de detalles del bucket de Amazon S3, elija Propiedades.
-
En el panel de propiedades, expanda Permisos y después elija Añadir política de bucket.
nota
Si ya hay una política asociada al bucket de Amazon S3, elija Editar política de bucket. A continuación, puede añadir las instrucciones del siguiente ejemplo a la política. Para añadir una nueva política, elige el enlace y sigue las instrucciones del generador de AWS políticas. Para obtener más información, consulte Información general de las políticas de IAM.
-
En la ventana Bucket Policy Editor, cree una política que permita
AccountBacceder a los artefactos de canalización y que permita añadir artefactos de salida si una acción, como una acción de creación o fuente personalizada, los crea.AccountB -
Elija Guardar y, a continuación, cierre el editor de políticas.
-
Elija Guardar para guardar los permisos para el bucket de Amazon S3.
Para crear una política para el rol de servicio de CodePipeline (consola)
-
Inicia sesión en Consola de administración de AWS con
AccountAy abre la consola de IAM en https://console.aws.amazon.com/iam/. -
Seleccione Roles en el panel de navegación.
-
En la lista de funciones, bajo Role Name (Nombre de función), elija el nombre de la función de servicio para CodePipeline.
-
En la pestaña Permisos, elija Añadir política en línea.
-
Elige la pestaña JSON e introduce la siguiente política para poder
AccountBasumir el rol. En el siguiente ejemplo,012ID_ACCOUNT_Bes el ARN deAccountB: -
Elija Revisar política.
-
En Name (Nombre), introduzca un nombre para esta política. Elija Crear política.
Configure las políticas y los roles en la cuenta propietaria del AWS recurso (cuenta B)
Al crear una aplicación, una implementación y un grupo de implementaciones en CodeDeploy, también crea un rol de instancia de Amazon EC2. (Este rol se crea automáticamente cuando se usa el asistente para ejecutar la implementación, pero también puede crearlo manualmente). Para que una canalización creada en AccountA utilice CodeDeploy los recursos creados enAccountB, debe:
-
Configurar una política para el rol de instancia que le permita el acceso al bucket de Amazon S3 donde se almacenan los artefactos de la canalización.
-
Cree un segundo rol si
AccountBestá configurado para el acceso entre cuentas.Este segundo rol no solo debe tener acceso al bucket de Amazon S3
AccountA, sino que también debe contener una política que permita el acceso a los CodeDeploy recursos y una política de relación de confianza que permitaAccountAal rol de CodePipeline servicio asumir el rol.nota
Estas políticas son específicas para configurar CodeDeploy los recursos que se utilizarán en una canalización creada con una AWS cuenta diferente. Otros AWS recursos requerirán políticas específicas para sus necesidades de recursos.
Para crear una política para el rol de instancia de Amazon EC2 configurado para CodeDeploy (consola)
-
Inicie sesión en Consola de administración de AWS con
AccountBy abra la consola de IAM en. https://console.aws.amazon.com/iam/ -
Seleccione Roles en el panel de navegación.
-
En la lista de funciones, en Nombre de función, elija el nombre de la función de servicio utilizada como función de instancia de Amazon EC2 para la CodeDeploy aplicación. El nombre de este rol puede variar, y un grupo de implementaciones puede usar más de un rol de instancia. Para obtener más información, consulte Crear un perfil de instancia de IAM para sus instancias de Amazon EC2.
-
En la pestaña Permisos, elija Añadir política en línea.
-
Seleccione la pestaña JSON e introduzca la siguiente política para conceder el acceso al bucket de Amazon S3 que se utiliza
AccountApara almacenar artefactos para las canalizaciones (en este ejemplo,codepipeline-us-east-2-1234567890): -
Elija Revisar política.
-
En Name (Nombre), introduzca un nombre para esta política. Elija Crear política.
-
Cree una segunda política que indique AWS KMS dónde
está el ARN de la clave gestionada por el cliente creadaarn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLEAccountAy configuradaAccountBpara permitir su uso:importante
Debe usar el identificador de cuenta de
AccountAesta política como parte del ARN del recurso para la AWS KMS clave, tal y como se muestra aquí, o la política no funcionará. -
Elija Revisar política.
-
En Name (Nombre), introduzca un nombre para esta política. Elija Crear política.
Ahora cree un rol de IAM para usarlo en el acceso entre cuentas y configúrelo para que el rol de CodePipeline servicio AccountA pueda asumir el rol. Este rol debe contener políticas que permitan el acceso a CodeDeploy los recursos y al bucket de Amazon S3 en el que se almacenan los artefactos. AccountA
Para configurar el rol de acceso entre cuentas en IAM
-
Inicie sesión en Consola de administración de AWS con
AccountBy abra la consola de IAM en https://console.aws.amazon.com/iam. -
Seleccione Roles en el panel de navegación. Elija Create role (Crear rol).
-
En Seleccione el tipo de entidad de confianza, elija Otra cuenta de AWS ). En Especificar las cuentas que pueden usar este rol, en ID de cuenta, introduce el ID de la AWS cuenta que va a crear la canalización en CodePipeline (
AccountA) y, a continuación, selecciona Siguiente: Permisos.importante
Este paso crea la política de relación de confianza entre
AccountByAccountA. Sin embargo, esto otorga acceso de nivel raíz a la cuenta y CodePipeline recomienda reducirlo al rol de CodePipeline servicio enAccountA. Siga el paso 16 para restringir los permisos. -
En Adjuntar políticas de permisos AmazonS3ReadOnlyAccess, elija Siguiente: Etiquetas y, a continuación, elija Siguiente.
nota
Esta no es la política que usará. Debe elegir una política para completar el asistente.
-
Elija Siguiente: Revisar. Escriba un nombre para este rol en Nombre del rol (por ejemplo,
CrossAccount_Role). Puede dar a este rol el nombre que desee, siempre y cuando siga las convenciones de nomenclatura de IAM. Considere dar al rol un nombre que indique claramente su finalidad. Seleccione Crear rol. -
En la lista de funciones, elija la función que acaba de crear (por ejemplo,
CrossAccount_Role) para abrir la página de resumen de esa función. -
En la pestaña Permisos, elija Añadir política en línea.
-
Selecciona la pestaña JSON e introduce la siguiente política para permitir el acceso a CodeDeploy los recursos:
-
Elija Revisar política.
-
En Name (Nombre), introduzca un nombre para esta política. Elija Crear política.
-
En la pestaña Permisos, elija Añadir política en línea.
-
Seleccione la pestaña JSON e introduzca la siguiente política para permitir que este rol recupere los artefactos de entrada del bucket de Amazon S3 y coloque los artefactos de salida en el bucket de Amazon S3
AccountA: -
Elija Revisar política.
-
En Name (Nombre), introduzca un nombre para esta política. Elija Crear política.
-
En la pestaña Permisos, busque el nombre de la política AmazonS3ReadOnlyAccess en la lista de políticas y elija el icono de eliminación (X) situado junto a la política. Cuando se le pregunte, elija Separar.
-
Seleccione la pestaña Relación de confianza y, a continuación, Editar la política de confianza. Seleccione la opción Agregar una entidad principal en la columna de la izquierda. Para el tipo de principal, seleccione Funciones de IAM y, a continuación, introduzca el ARN del rol de CodePipeline servicio en.
AccountAEliminearn:aws:iam::Account_A:rootde la lista de Entidades principales de AWS y, a continuación, seleccione Actualizar la política.
Paso 2: Editar la canalización
No puedes usar la CodePipeline consola para crear o editar una canalización que utilice los recursos asociados a otra AWS cuenta. Sin embargo, puede usar la consola para crear la estructura general de la canalización y, a continuación, usarla AWS CLI para editar la canalización y agregar esos recursos. Como alternativa, puede usar la estructura de una canalización existente y agregarle los recursos manualmente.
Para agregar los recursos asociados a otro AWS cuenta (AWS CLI)
-
En un terminal (Linux, macOS o Unix) o el símbolo del sistema (Windows), ejecute el comando get-pipeline para la canalización a la que desea añadir recursos. Copie el resultado del comando a un archivo JSON. Por ejemplo, para una canalización denominada MyFirstPipeline, debería escribir un texto similar al siguiente:
aws codepipeline get-pipeline --nameMyFirstPipeline>pipeline.jsonEl resultado se envía al archivo
pipeline.json. -
Abra el archivo JSON en cualquier editor de texto sin formato. Una vez
"type": "S3"en el almacén de artefactos, añada la clave de cifrado, el ID y la información de tipo de KMS, dondecodepipeline-us-east-2-1234567890figure el nombre del bucket de Amazon S3 utilizado para almacenar los artefactos para la canalización y el ARN de la clavegestionada por el cliente que acaba de crear:arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE{ "artifactStore": { "location": "codepipeline-us-east-2-1234567890", "type": "S3", "encryptionKey": { "id": "arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE", "type": "KMS" } }, -
Agregue una acción de implementación en una etapa para usar los CodeDeploy recursos asociados
AccountB, incluidos losroleArnvalores del rol multicuenta que creó ().CrossAccount_RoleEl siguiente ejemplo muestra un JSON que agrega una acción de implementación denominada
ExternalDeploy. Utiliza los CodeDeploy recursos creadosAccountBen una etapa denominadaStaging. En el siguiente ejemplo, el ARN deAccountBes012ID_ACCOUNT_B:, { "name": "Staging", "actions": [ { "inputArtifacts": [ { "name": "MyAppBuild" } ], "name": "ExternalDeploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "version": "1", "provider": "CodeDeploy" }, "outputArtifacts": [], "configuration": { "ApplicationName": "AccountBApplicationName", "DeploymentGroupName": "AccountBApplicationGroupName" }, "runOrder": 1, "roleArn": "arn:aws:iam::012ID_ACCOUNT_B:role/CrossAccount_Role" } ] }nota
Este no es el JSON para toda la canalización, sino solo la estructura de la acción en una etapa.
-
Debe eliminar las líneas
metadatadel archivo para que el comando update-pipeline pueda utilizarlo. Quite la sección de la estructura de canalizaciones del archivo JSON (las líneas"metadata": { }y los campos"created","pipelineARN"y"updated"que contenga).Por ejemplo, quite las siguientes líneas de la estructura:
"metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }Guarde el archivo.
-
Para aplicar los cambios, ejecute el comando update-pipeline, especificando el archivo JSON de la canalización, de forma similar a como se muestra a continuación:
importante
Asegúrese de incluir
file://antes del nombre de archivo. Es obligatorio en este comando.aws codepipeline update-pipeline --cli-input-json file://pipeline.jsonEste comando devuelve la estructura completa de la canalización editada.
Para probar la canalización que usa los recursos asociados a otra AWS inscrita
-
En un terminal (Linux, macOS o Unix) o el símbolo del sistema (Windows), ejecute el comando start-pipeline-execution, especificando el nombre de la canalización, de un modo similar al siguiente:
aws codepipeline start-pipeline-execution --name MyFirstPipelinePara obtener más información, consulte Iniciar la canalización manualmente.
-
Inicie sesión en Consola de administración de AWS con
AccountAy abra la CodePipeline consola en http://console.aws.amazon.com/codesuite/codepipeline/home. Se muestran los nombres de todas las canalizaciones asociadas a su AWS cuenta.
-
En Name, elija el nombre de la canalización que acaba de editar. Esto abre una vista detallada de la canalización, que incluye el estado de cada acción en cada etapa de la canalización.
-
Vea el progreso en la canalización. Espere a que aparezca un mensaje de éxito sobre la acción que utiliza el recurso asociado a otra AWS cuenta.
nota
Recibirás un error si intentas ver los detalles de la acción mientras has iniciado sesión con
AccountA. Cierra sesión y, a continuación, inicia sesión conAccountBpara ver los detalles de la implementación en CodeDeploy.