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.
Crea una canalización CodePipeline que utilice recursos de otra AWS cuenta
Puede ser conveniente crear una canalización que use recursos creados o administrados por otra cuenta de AWS . Por ejemplo, es posible que desees usar una cuenta para tu canalización y otra para tus CodeDeploy recursos.
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.
-
-
No se admiten las acciones entre cuentas para los siguientes tipos de acción:
-
Acciones de compilación Jenkins
-
Para este ejemplo, debes crear una clave AWS Key Management Service (AWS KMS) para usarla, añadir la clave a la canalización y configurar políticas y roles de cuenta para permitir el acceso entre cuentas. Para una AWS KMS clave, puedes usar el ID de la clave, la clave ARN o el aliasARN.
nota
Los alias solo se reconocen en la cuenta que creó la KMS clave. Para las acciones entre cuentas, solo puedes usar el ID de la clave o la clave ARN para identificar la clave. Las acciones entre cuentas implican el uso del rol de la otra cuenta (AccountB), por lo que al especificar el ID de clave se utilizará la clave de la otra cuenta (AccountB).
En este tutorial y sus ejemplos, AccountA
es 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 a la función de servicio que utiliza AWS CodePipeline. AccountB
es la cuenta utilizada originalmente para crear la CodeDeploy aplicación, el grupo de implementación y el rol de servicio que utilizaba CodeDeploy.
En AccountA
editar una canalización para utilizar la CodeDeploy aplicación creada por AccountB
, AccountA
debe:
-
Solicita el identificador ARN o el identificador de cuenta de
AccountB
(en este tutorial, elAccountB
El ID es012ID_ACCOUNT_B
). -
Crea o usa una clave administrada por el AWS KMS cliente en la región para la canalización y otorga permisos para usar esa clave en el rol de servicio (
CodePipeline_Service_Role
) yAccountB
. -
Cree una política de bucket de Amazon S3 que otorgue
AccountB
acceso al bucket de Amazon S3 (por ejemplo,codepipeline-us-east-2-1234567890
). -
Cree una política que permita
AccountA
asumir un rol configurado porAccountB
, y adjunte esa política a la función de servicio (CodePipeline_Service_Role
). -
Edite la canalización para usar la AWS KMS clave administrada por el cliente en lugar de la clave predeterminada.
En AccountB
para permitir el acceso a sus recursos a una canalización creada en AccountA
, AccountB
debe:
-
Solicita el identificador ARN o el identificador de cuenta de
AccountA
(en este tutorial, elAccountA
El ID es012ID_ACCOUNT_A
). -
Cree una política aplicada al rol de EC2 instancia de Amazon configurado para el CodeDeploy que permita el acceso al bucket de Amazon S3 (
codepipeline-us-east-2-1234567890
). -
Cree una política que se aplique a la función de EC2 instancia de Amazon configurada para la CodeDeploy que se pueda acceder a la clave gestionada por el AWS KMS cliente que se utiliza para cifrar los artefactos de la canalización en
AccountA
. -
Configure y asocie un IAM rol (
CrossAccount_Role
) con una política de relación de confianza que permite que el rol CodePipeline de servicio enAccountA
para asumir el rol. -
Cree una política que permita el acceso a los recursos de despliegue que necesita 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úntelo aCrossAccount_Role
.
Temas
Requisito previo: crear una clave de cifrado de AWS KMS
Las claves gestionadas por el cliente 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
-
Inicie sesión en el AWS Management Console con
AccountA
y abre la AWS KMS consola. -
A la izquierda, seleccione Claves administradas por el cliente.
-
Elija Create key. En la Configurar clave, deje el valor predeterminado Simétrico seleccionado y elija Siguiente.
-
En Alias, introduzca un alias para usarlo en esta clave (por ejemplo,
PipelineName-Key
). Si lo desea, proporcione una descripción y etiquetas para esta clave y, a continuación, seleccione 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 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, selecciona Añadir otra cuenta. AWS Introduce el ID de cuenta para
AccountB
para completar el yARN, 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 cópielo 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
Tras crear la AWS KMS clave, debe crear y adjuntar políticas que permitan el acceso entre cuentas. Esto requiere la acción de ambos AccountA
y AccountB
.
Temas
Configure las políticas y las funciones en la cuenta que creará la canalización (AccountA
)
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 los artefactos como para la función de servicio CodePipeline.
Para crear una política para el bucket de Amazon S3 que concede acceso a AccountB (consola)
-
Inicie sesión en el AWS Management Console con
AccountA
y abra la consola Amazon S3 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 depósito se llama
codepipeline-
, ¿dónderegion
-1234567EXAMPLE
region
es la AWS región en la que creaste la canalización y1234567EXAMPLE
es 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 política nueva, elija el enlace y siga las instrucciones del generador de AWS políticas. Para obtener más información, consulte Descripción general de IAM las políticas.
-
En la ventana Editor de políticas e bucket, escriba la siguiente política. Esto permitirá
AccountB
acceso a los artefactos de la tubería, y daráAccountB
la posibilidad de añadir artefactos de salida si los crea una acción, como una fuente personalizada o una acción de compilación.En el siguiente ejemplo, ARN es para
AccountB
es012ID_ACCOUNT_B
. El ARN para el bucket de Amazon S3 escodepipeline-us-east-2-1234567890
. Sustitúyalos ARNs ARN por los de la cuenta a la que quieres permitir el acceso y ARN por los del bucket de Amazon S3:{ "Version": "2012-10-17", "Id": "SSEAndSSLPolicy", "Statement": [ { "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::
codepipeline-us-east-2-1234567890
/*", "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms" } } }, { "Sid": "DenyInsecureConnections", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890
/*", "Condition": { "Bool": { "aws:SecureTransport": false } } }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root
" }, "Action": [ "s3:Get*", "s3:Put*" ], "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890
/*" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root
" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890
" } ] } -
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)
-
Inicie sesión en el AWS Management Console con
AccountA
y abre la IAM consola en https://console.aws.amazon.com/iam/. -
Seleccione Roles en el panel de navegación.
-
En la lista de funciones, en Nombre de la función, elija el nombre de la función de servicio CodePipeline.
-
En la pestaña Permisos, elija Añadir política en línea.
-
Seleccione la JSONpestaña e introduzca la siguiente política para permitir
AccountB
para asumir el rol. En el siguiente ejemplo,012ID_ACCOUNT_B
es el ARN paraAccountB
:{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::
012ID_ACCOUNT_B
:role/*" ] } } -
Elija Revisar política.
-
En Name (Nombre), introduzca un nombre para esta política. Elija Crear política.
Configure las políticas y las funciones en la cuenta propietaria del AWS recurso (AccountB
)
Cuando creas una aplicación, un despliegue y un grupo de despliegues en CodeDeploy, también creas un rol de EC2 instancia de Amazon. (Este rol se crea automáticamente cuando se usa el asistente para ejecutar la implementación, pero también puede crearlo manualmente). Para una canalización creada en AccountA
para utilizar CodeDeploy los recursos creados en AccountB
, 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 en
AccountB
configurado para el acceso entre cuentas.Esta segunda función no solo debe tener acceso al bucket de Amazon S3 en
AccountA
, 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 permita la función CodePipeline de servicio enAccountA
para 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 EC2 instancia de Amazon configurado para CodeDeploy (consola)
-
Inicia sesión en el AWS Management Console con
AccountB
y abre la IAM consola 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, elige el nombre de la función de servicio utilizada como función de EC2 instancia de Amazon 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 IAM instancia para sus Amazon EC2 Instances.
-
En la pestaña Permisos, elija Añadir política en línea.
-
Seleccione la JSONpestaña e introduzca la siguiente política para conceder acceso al bucket de Amazon S3 utilizado por
AccountA
para almacenar artefactos para canalizaciones (en este ejemplo,codepipeline-us-east-2-1234567890
):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*" ], "Resource": [ "arn:aws:s3:::
codepipeline-us-east-2-1234567890
/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::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 para determinar AWS KMS dónde
está ARN la clave gestionada por el cliente creada enarn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
AccountA
y configurada para permitirAccountB
para usarlo:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:
012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
" ] } ] }importante
Debe usar el ID de cuenta de
AccountA
en esta política como parte del recurso ARN para la AWS KMS clave, 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 IAM rol para usarlo en el acceso entre cuentas y configúrelo de modo que el rol de CodePipeline servicio esté en AccountA
puede asumir el rol. Esta función debe contener políticas que permitan el acceso a los CodeDeploy recursos y al bucket de Amazon S3 que se utiliza para almacenar los artefactos en AccountA
.
Para configurar el rol multicuenta en IAM
-
Inicie sesión en el con AWS Management Console
AccountB
y abre la IAM consola en https://console.aws.amazon.com/iam. -
Seleccione Roles en el panel de navegación. Elija Crear rol.
-
En Seleccione el tipo de entidad de confianza, elija Otra cuenta de AWS ). En Especificar las cuentas que pueden usar esta función, en ID de cuenta, introduzca el ID de AWS cuenta de la cuenta en la que se creará la canalización ( CodePipeline
AccountA
) y, a continuación, selecciona Siguiente: permisos.importante
Este paso crea la política de relación de confianza entre
AccountB
yAccountA
. Sin embargo, esto otorga acceso de nivel raíz a la cuenta y se CodePipeline recomienda limitarlo a la función de CodePipeline servicio enAccountA
. Siga el paso 16 para restringir los permisos. -
En Adjuntar políticas de permisos, selecciona AmazonS3 yReadOnlyAccess, a continuación, selecciona Siguiente: etiquetas.
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 asignar a este rol el nombre que desee, siempre y cuando siga las convenciones de nomenclatura indicadas enIAM. Considere dar al rol un nombre que indique claramente su finalidad. Elija Crear rol. -
En la lista de roles, elige el rol que acabas de crear (por ejemplo,
CrossAccount_Role
) para abrir la página de resumen de ese rol. -
En la pestaña Permisos, elija Añadir política en línea.
-
Seleccione la JSONpestaña e introduzca la siguiente política para permitir el acceso a CodeDeploy los recursos:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codedeploy:CreateDeployment", "codedeploy:GetDeployment", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision" ], "Resource": "*" } ] }
-
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 JSONpestaña e introduzca la siguiente política para permitir que esta función recupere los artefactos de entrada y coloque los artefactos de salida en el bucket de Amazon S3 en
AccountA
:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::
codepipeline-us-east-2-1234567890
/*" ] } ] } -
Elija Revisar política.
-
En Name (Nombre), introduzca un nombre para esta política. Elija Crear política.
-
En la pestaña Permisos, busque AmazonS3 ReadOnlyAccess en la lista de políticas que aparece debajo del nombre de la política 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, elija Editar política de confianza. Elija la opción Añadir un principal en la columna de la izquierda. En el tipo principal, elija IAMFunciones y, a continuación, ARN especifique la función CodePipeline de servicio en
AccountA
. Eliminearn:aws:iam::Account_A:root
de la lista de AWS directores y, a continuación, seleccione Actualizar política.
Paso 2: Editar la canalización
No puedes usar la CodePipeline consola para crear o editar una canalización que utilice recursos asociados a otra AWS cuenta. Sin embargo, puedes usar la consola para crear la estructura general de la canalización y, AWS CLI a continuación, usarla para editarla y añadir esos recursos. Como alternativa, puede usar la estructura de una canalización existente y agregarle los recursos manualmente.
Para añadir los recursos asociados a otra 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 en un JSON archivo. Por ejemplo, en el caso de una canalización denominada MyFirstPipeline, escribirías algo parecido a lo siguiente:
aws codepipeline get-pipeline --name
MyFirstPipeline
>pipeline.json
El resultado se envía al
pipeline.json
file. -
Abra el JSON archivo en cualquier editor de texto sin formato. Una vez
"type": "S3"
en el almacén de artefactos, añade el KMS encryptionKey identificador y escribe la información dondecodepipeline-us-east-2-1234567890
es el nombre del bucket de Amazon S3 que se utiliza para almacenar los artefactos de la canalización y
es el ARN de la clave gestionada 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" } }, -
Añada una acción de despliegue en una etapa para utilizar los CodeDeploy recursos asociados a
AccountB
, incluidos losroleArn
valores del rol multicuenta que creó (CrossAccount_Role
).En el siguiente ejemplo, JSON se muestra que agrega una acción de despliegue denominada
ExternalDeploy
. Utiliza los CodeDeploy recursos creados enAccountB
en una etapa llamadaStaging
. En el siguiente ejemplo, el ARN paraAccountB
es012ID_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
Esta no es la estructura JSON para toda la canalización, solo la estructura de la acción en una etapa.
-
Debe eliminar las líneas
metadata
del archivo para que el comando update-pipeline pueda utilizarlo. Elimine la sección de la estructura de canalización del JSON archivo (las"metadata": { }
líneas y los"updated"
campos"created"
"pipelineARN"
, y).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 update-pipeline comando especificando el JSON archivo de canalización, similar al siguiente:
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.json
Este comando devuelve la estructura completa de la canalización editada.
Para probar la canalización que utiliza los recursos asociados a otra AWS cuenta
-
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 MyFirstPipeline
Para obtener más información, consulte Iniciar la canalización manualmente.
-
Inicia sesión en el AWS Management Console con
AccountA
y abre la CodePipeline consola en http://console.aws.amazon.com/codesuite/codepipeline/home. Se muestran los nombres de todas las canalizaciones asociadas a tu 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
. Cierre sesión y, a continuación, inicie sesión conAccountB
para ver los detalles de la implementación en CodeDeploy.