Tengo AWS Code Pipeline para CI / CD para mi aplicación. Estoy usando 2 cuentas de AWS. Account-1 es para mis repositorios y pipelines y account-2 es donde están todos los Infra / servers.

Así que esta es la etapa de implementación de mi canalización donde deploymentGroup se crea en la cuenta 2 y se asigna como objeto props.ec2DeploymentGroup

{
    stageName: "deploy-to-" + props.targetEnvName,
    actions: [
       new codepipeline_actions.CodeDeployServerDeployAction({
          actionName: "deploy-to-"+props.targetEnvName+"-"+ props.applicationName + "-ec2",
          input: appBuildOutput,
          deploymentGroup: props.ec2DeploymentGroup
       })
        ]
  }

Ahora, cuando mi etapa de implementación se ejecuta, intenta implementar artefactos en DeploymentGroup / Servers en la cuenta-2, pero falla en el evento downloadBundle con error.

Acceso denegado

Y esto se debe a que mi depósito de artefactos está en la cuenta 1 (porque mi canalización está en la cuenta 1) y el grupo de implementación en la cuenta 2 no tiene acceso a este depósito de artefactos en la cuenta 1.

Intenté hacer algo como esto, pero no estoy seguro de cómo obtener el rol de props.ec2DeploymentGroup para pasarlo aquí.

pipeline.artifactBucket.grantRead(whatObjectToPassHere)

Entonces, ¿cómo debo otorgar acceso cruzado de cuentas al depósito de artefactos mediante AWS CDK?

0
Dhiraj 24 feb. 2021 a las 04:21

1 respuesta

La mejor respuesta

Entonces encontré la solución a mi problema (tuve ayuda del soporte de AWS) mi perfil de instancia EC2 no tenía acceso a mi depósito de artefactos en otra cuenta.

Que administré en CDK usando el siguiente código

const ec2InstanceProfileRole = iam.Role.fromRoleArn(this, 'Role', 
'arn:aws:iam::'+props.targetAccountId+':role/'+props.ec2InstanceProfileName, 
{
   mutable: false,
});

pipeline.artifactBucket.grantRead(ec2InstanceProfileRole);
0
Dhiraj 8 mar. 2021 a las 03:17