

# Requisitos previos para sincronizar pilas con un repositorio de Git mediante la sincronización de Git
<a name="git-sync-prereq"></a>

Antes de sincronizar una pila de CloudFormation con su repositorio de Git, compruebe que se cumplan los siguientes requisitos.

**Topics**
+ [Repositorio de Git](#git-sync-prereq-repo)
+ [Plantilla de CloudFormation](#git-sync-prereq-template)
+ [Rol de servicio de sincronización de Git](#git-sync-prereq-iam)
+ [Permisos de IAM para los usuarios de la consola](#git-sync-prereq-user-permissions)

## Repositorio de Git
<a name="git-sync-prereq-repo"></a>

Debe tener un repositorio de Git alojado en una de las siguientes plataformas.
+ [GitHub](https://github.com/)
+ [GitHub Enterprise](https://github.com/enterprise)
+ [GitLab](https://about.gitlab.com/)
+ [Bitbucket](https://bitbucket.org)
+ [GitLab autoadministrado](https://docs.gitlab.com/subscriptions/self_managed/)

El repositorio puede ser público o privado. Deberá conectar este repositorio de Git a CloudFormation a través de la [consola de Conexiones](https://console.aws.amazon.com/codesuite/settings/connections).

## Plantilla de CloudFormation
<a name="git-sync-prereq-template"></a>

El repositorio de Git debe contener un archivo de [plantilla de CloudFormation](git-sync-concepts-terms.md#git-sync-concepts-terms-template-file) verificado en la ramificación que pretende conectar con la sincronización de Git. El [archivo de implementación de la pila](git-sync-concepts-terms.md#git-sync-concepts-terms-depoyment-file) hará referencia a esta plantilla.

## Rol de servicio de sincronización de Git
<a name="git-sync-prereq-iam"></a>

La sincronización de Git requiere un rol de IAM. Puede elegir que se cree un rol de IAM para la pila al configurar la sincronización de Git o puede utilizar un rol existente.

**nota**  
Un rol de IAM generado automáticamente solo aplica permisos a la pila para la que se generó el rol. Para volver a utilizar un rol de IAM generado automáticamente, debe editar el rol de la nueva pila.

### Permisos necesarios para la creación de un rol de servicio de sincronización de Git
<a name="git-sync-prereq-permissions"></a>

El rol de IAM que proporcione para la sincronización de Git requiere los siguientes permisos.
+ `cloudformation:CreateChangeSet`
+ `cloudformation:DeleteChangeSet`
+ `cloudformation:DescribeChangeSet`
+ `cloudformation:DescribeStackEvents`
+ `cloudformation:DescribeStacks`
+ `cloudformation:ExecuteChangeSet`
+ `cloudformation:ListChangeSets`
+ `cloudformation:ValidateTemplate`
+ `events:PutRule`
+ `events:PutTargets`

**nota**  
Los permisos necesarios anteriores se agregan automáticamente a los roles de IAM que genera la sincronización de Git.

El siguiente ejemplo de rol de IAM incluye los permisos para la sincronización de Git.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SyncToCloudFormation",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateChangeSet",
                "cloudformation:DeleteChangeSet",
                "cloudformation:DescribeChangeSet",
                "cloudformation:DescribeStackEvents",
                "cloudformation:DescribeStacks",
                "cloudformation:ExecuteChangeSet",
                "cloudformation:GetTemplate",
                "cloudformation:ListChangeSets",
                "cloudformation:ListStacks",
                "cloudformation:ValidateTemplate"
            ],
            "Resource": "*"
        },
        {
            "Sid": "PolicyForManagedRules",
            "Effect": "Allow",
            "Action": [
                "events:PutRule",
                "events:PutTargets"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                "events:ManagedBy": ["cloudformation.sync.codeconnections.amazonaws.com"]
                }
            }
        },
        {
            "Sid": "PolicyForDescribingRule",
            "Effect": "Allow",
            "Action": "events:DescribeRule",
            "Resource": "*"
        }
    ]
}
```

------

#### Política de confianza
<a name="git-sync-prereq-trust-policy"></a>

Debe proporcionar la siguiente política de confianza a la hora de crear el rol para definir la relación de confianza.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CfnGitSyncTrustPolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudformation.sync.codeconnections.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

Le recomendamos que utilice las claves de condición `aws:SourceArn` y `aws:SourceAccount` para protegerse contra el problema del suplente confuso. La cuenta de origen es el ID de su cuenta y el ARN de origen es el ARN de la conexión en el servicio de [CodeConnections](https://docs.aws.amazon.com/codeconnections/latest/APIReference/Welcome.html) que permite a CloudFormation conectarse a su repositorio de Git.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CfnGitSyncTrustPolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudformation.sync.codeconnections.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:codeconnections:us-east-1:123456789012:connection/EXAMPLE64-8aad-4d5d-8878-dfcab0bc441f"
        }
      }
    }
  ]
}
```

------

Para obtener más información sobre el problema del suplente confuso, consulte [Prevención de la sustitución confusa entre servicios](cross-service-confused-deputy-prevention.md).

## Permisos de IAM para los usuarios de la consola
<a name="git-sync-prereq-user-permissions"></a>

Para configurar correctamente la sincronización de Git a través de la consola CloudFormation, los usuarios finales también deben tener permisos a través de IAM.

Se requieren los siguientes permisos de `codeconnections` para crear y administrar la conexión a su repositorio Git.
+ `codeconnections:CreateRepositoryLink`
+ `codeconnections:CreateSyncConfiguration`
+ `codeconnections:DeleteRepositoryLink`
+ `codeconnections:DeleteSyncConfiguration`
+ `codeconnections:GetRepositoryLink`
+ `codeconnections:GetSyncConfiguration`
+ `codeconnections:ListRepositoryLinks`
+ `codeconnections:ListSyncConfigurations`
+ `codeconnections:ListTagsForResource`
+ `codeconnections:TagResource`
+ `codeconnections:UntagResource`
+ `codeconnections:UpdateRepositoryLink`
+ `codeconnections:UpdateSyncBlocker`
+ `codeconnections:UpdateSyncConfiguration`
+ `codeconnections:UseConnection`

Los usuarios de la consola también deben tener los siguientes permisos de `cloudformation` para ver y administrar las pilas durante el proceso de configuración de la sincronización de Git.
+ `cloudformation:CreateChangeSet`
+ `cloudformation:DeleteChangeSet`
+ `cloudformation:DescribeChangeSet`
+ `cloudformation:DescribeStackEvents`
+ `cloudformation:DescribeStacks`
+ `cloudformation:ExecuteChangeSet`
+ `cloudformation:GetTemplate`
+ `cloudformation:ListChangeSets`
+ `cloudformation:ListStacks`
+ `cloudformation:ValidateTemplate`

**nota**  
Aunque los permisos del conjunto de cambios (`cloudformation:CreateChangeSet`, `cloudformation:DeleteChangeSet`, `cloudformation:DescribeChangeSet`, `cloudformation:ExecuteChangeSet`) podrían no ser estrictamente necesarios para el uso exclusivo de la consola, se recomiendan para habilitar las capacidades de inspección y gestión del full stack.

El siguiente ejemplo de política de IAM incluye los permisos de usuario necesarios para configurar la sincronización de Git a través de la consola.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CodeConnectionsPermissions",
            "Effect": "Allow",
            "Action": [
                "codeconnections:CreateRepositoryLink",
                "codeconnections:CreateSyncConfiguration",
                "codeconnections:DeleteRepositoryLink",
                "codeconnections:DeleteSyncConfiguration",
                "codeconnections:GetRepositoryLink",
                "codeconnections:GetSyncConfiguration",
                "codeconnections:ListRepositoryLinks",
                "codeconnections:ListSyncConfigurations",
                "codeconnections:ListTagsForResource",
                "codeconnections:TagResource",
                "codeconnections:UntagResource",
                "codeconnections:UpdateRepositoryLink",
                "codeconnections:UpdateSyncBlocker",
                "codeconnections:UpdateSyncConfiguration",
                "codeconnections:UseConnection",
                "codeconnections:CreateForcedTargetSync",
                "codeconnections:CreatePullRequestForResource"
            ],
            "Resource": "*"
        },
        {
            "Sid": "CloudFormationConsolePermissions",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateChangeSet",
                "cloudformation:DeleteChangeSet",
                "cloudformation:DescribeChangeSet",
                "cloudformation:DescribeStackEvents",
                "cloudformation:DescribeStacks",
                "cloudformation:ExecuteChangeSet",
                "cloudformation:GetTemplate",
                "cloudformation:ListChangeSets",
                "cloudformation:ListStacks",
                "cloudformation:ValidateTemplate"
            ],
            "Resource": "*"
        }
    ]
}
```

------

**nota**  
Al crear una política de IAM que incluya los permisos `codeconnections:CreateForcedTargetSync` y `codeconnections:CreatePullRequestForResource`, es posible que usted vea una advertencia en la consola de IAM que indique que estas acciones no existen. Esta advertencia se puede ignorar y la política se seguirá creando correctamente. Estos permisos son necesarios para determinadas operaciones de sincronización de Git a pesar de que la consola de IAM no los reconozca.