

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.

# Políticas de repositorios
<a name="repo-policies"></a>

CodeArtifact utiliza permisos basados en recursos para controlar el acceso. Los permisos basados en recursos le permiten especificar quién tiene acceso a un repositorio y qué acciones puede realizar en él. De forma predeterminada, solo los propietarios de los repositorios tienen acceso a estos. Puede aplicar un documento de política que permita a otras entidades principales de IAM el acceso a su repositorio.

Para obtener más información, consulte [Políticas basadas en recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based) y [Políticas basadas en identidades y Políticas basadas en recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html).

## Cree una política de recursos para conceder el acceso de lectura
<a name="creating-a-resource-policy-to-grant-read-access"></a>

Una política de recursos es un archivo de texto en formato JSON. El archivo debe especificar una entidad principal (actor), una o más acciones y un efecto (`Allow` o `Deny`). Por ejemplo, la siguiente política de recursos concede a la cuenta permiso `123456789012` para descargar paquetes del repositorio.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:ReadFromRepository"
            ],
            "Effect": "Allow",
            "Principal": {
                 "AWS": "arn:aws:iam::123456789012:root"
            },
            "Resource": "*"
        }
    ]
}
```

------

Como la política solo se evalúa para las operaciones realizadas en el repositorio al que está adjunta, no es necesario que especifique un recurso. Como el recurso está implícito, puede establecer el valor `Resource` en `*`. Para que un administrador de paquetes pueda descargar un paquete de este repositorio, también tendrá que crear una política de dominio para el acceso entre cuentas. La política de dominio debe conceder, como mínimo, el permiso `codeartifact:GetAuthorizationToken` a la entidad principal. Para ver un ejemplo de una política de dominio completa para otorgar acceso entre cuentas, consulte [Ejemplo de políticas de dominio](domain-policies.md#domain-policy-example).

**nota**  
La acción `codeartifact:ReadFromRepository` solo se puede usar en un recurso del repositorio. No puede colocar el nombre de recurso de Amazon (ARN) de un paquete como recurso con `codeartifact:ReadFromRepository` como la acción para permitir el acceso de lectura a un subconjunto de paquetes de un repositorio. Una entidad principal determinada puede leer todos los paquetes de un repositorio o ninguno de ellos.

Como la única acción especificada en el repositorio es `ReadFromRepository`, los usuarios y los roles de la cuenta `1234567890` puedan descargar paquetes del repositorio. Sin embargo, no pueden realizar otras acciones en ellos (por ejemplo, enumerar los nombres y las versiones de los paquetes). Por lo general, se conceden permisos en la siguiente política, además de `ReadFromRepository` porque un usuario que descarga paquetes de un repositorio también necesita interactuar con él de otras formas.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:DescribePackageVersion",
                "codeartifact:DescribeRepository",
                "codeartifact:GetPackageVersionReadme",
                "codeartifact:GetRepositoryEndpoint",
                "codeartifact:ListPackages",
                "codeartifact:ListPackageVersions",
                "codeartifact:ListPackageVersionAssets",
                "codeartifact:ListPackageVersionDependencies",
                "codeartifact:ReadFromRepository"
            ],
            "Effect": "Allow",
            "Principal": {
                 "AWS": "arn:aws:iam::123456789012:root"
            },
            "Resource": "*"
        }
    ]
}
```

------

## Configuración de una política
<a name="setting-a-policy"></a>

Después de haber creado un documento de políticas, utilice el comando `put-repository-permissions-policy` para adjuntarlo a un repositorio:

```
aws codeartifact put-repository-permissions-policy --domain my_domain --domain-owner 111122223333 \
          --repository my_repo --policy-document file:///PATH/TO/policy.json
```

Al llamar a `put-repository-permissions-policy`, se ignora la política de recursos del repositorio al evaluar los permisos. Esto garantiza que el propietario de un dominio no pueda excluirse del repositorio, lo que le impediría actualizar la política de recursos.

**nota**  
 No puedes conceder permisos a otra AWS cuenta para actualizar la política de recursos de un repositorio mediante una política de recursos, ya que la política de recursos se ignora al realizar una llamada. put-repository-permissions-policy 

Código de salida de ejemplo:

```
{
    "policy": {
        "resourceArn": "arn:aws:codeartifact:region-id:111122223333:repository/my_domain/my_repo",
        "document": "{ ...policy document content...}",
        "revision": "MQlyyTQRASRU3HB58gBtSDHXG7Q3hvxxxxxxx="
    }
}
```

El resultado del comando contiene el nombre de recurso de Amazon (ARN) del recurso de repositorio, todo el contenido del documento de política y un identificador de revisión. Puede pasar el identificador de revisión a `put-repository-permissions-policy` usando la opción `--policy-revision`. Esto garantiza que se sobrescriba una revisión conocida del documento y no una versión más reciente configurada por otro escritor.

## Leer una política
<a name="reading-a-policy"></a>

Utilice el comando `get-repository-permissions-policy` para leer una versión existente de un documento de política. Para formatear la salida para que sea legible, utilice `--output` y `--query policy.document` junto con el módulo `json.tool` de Python.

```
aws codeartifact get-repository-permissions-policy --domain my_domain --domain-owner 111122223333 \
          --repository my_repo --output text --query policy.document | python -m json.tool
```

Código de salida de ejemplo:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": [
                "codeartifact:DescribePackageVersion",
                "codeartifact:DescribeRepository",
                "codeartifact:GetPackageVersionReadme",
                "codeartifact:GetRepositoryEndpoint",
                "codeartifact:ListPackages",
                "codeartifact:ListPackageVersions",
                "codeartifact:ListPackageVersionAssets",
                "codeartifact:ListPackageVersionDependencies",
                "codeartifact:ReadFromRepository"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## Eliminar una política
<a name="deleting-a-policy"></a>

Utilice el comando `delete-repository-permissions-policy` para eliminar una política de un repositorio.

```
aws codeartifact delete-repository-permissions-policy --domain my_domain --domain-owner 111122223333 \
          --repository my_repo
```

El formato de la salida es el mismo que el del comando `get-repository-permissions-policy`.

## Otorgar acceso de lectura a las entidades principales
<a name="granting-read-access-to-specific-principals"></a>

 Al especificar el usuario raíz de una cuenta como entidad principal en un documento de política, se concede acceso a todos los usuarios y roles de esa cuenta. Para limitar el acceso a los usuarios o roles seleccionados, utilice su ARN en la sección `Principal` de la política. Por ejemplo, utilice lo siguiente para conceder acceso de lectura al usuario de IAM `bob` de la cuenta `123456789012`.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:ReadFromRepository"
            ],
            "Effect": "Allow",
            "Principal": {
                 "AWS": "arn:aws:iam::123456789012:user/bob"
            },
            "Resource": "*"
        }
    ]
}
```

------

## Otorgar acceso de escritura a los paquetes
<a name="granting-write-access-to-specific-packages"></a>

 La acción `codeartifact:PublishPackageVersion` se utiliza para controlar el permiso para publicar nuevas versiones de un paquete. El recurso utilizado en esta acción debe ser un paquete. El formato del CodeArtifact paquete ARNs es el siguiente.

```
arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/package-format/package-namespace/package-name
```

El siguiente ejemplo muestra el ARN de un paquete npm con alcance `@parity` y nombre `ui` en el repositorio `my_repo` del dominio `my_domain`. 

```
arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/npm/parity/ui
```

El ARN de un paquete npm sin alcance tiene la cadena vacía para el campo de espacio de nombres. Por ejemplo, el siguiente es el ARN de un paquete sin alcance y con un nombre `react` en el repositorio `my_repo` del dominio `my_domain`.

```
arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/npm//react
```

La siguiente política otorga permiso `123456789012` a la cuenta para publicar versiones de `@parity/ui` en el repositorio `my_repo`.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:PublishPackageVersion"
            ],
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Resource": "arn:aws:codeartifact:us-east-1:111122223333:package/my_domain/my_repo/npm/parity/ui"
        }
    ]
}
```

------

**importante**  
Para conceder permiso para publicar las versiones de Maven y NuGet del paquete, añada los siguientes permisos además de`codeartifact:PublishPackageVersion`.  
NuGet: `codeartifact:ReadFromRepository` y especifique el recurso del repositorio
Maven: `codeartifact:PutPackageMetadata`

 Como esta política especifica un dominio y un repositorio como parte del recurso, solo permite publicar cuando están adjuntos a ese repositorio. 

## Otorgar acceso de escritura a un repositorio
<a name="granting-write-access-to-a-repository"></a>

 Puede usar caracteres comodín para conceder permisos de escritura a todos los paquetes de un repositorio. Por ejemplo, use la siguiente política para conceder permiso a una cuenta para escribir en todos los paquetes del repositorio `my_repo`.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:PublishPackageVersion"
            ],
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Resource": "arn:aws:codeartifact:us-east-1:111122223333:package/my_domain/my_repo/*"
        }
    ]
}
```

------

## Interacción entre las políticas de repositorios y de dominios
<a name="interaction-repo-domain-policies"></a>

 CodeArtifact admite políticas de recursos en dominios y repositorios. Las políticas de recursos son opcionales. Cada dominio puede tener una política y cada repositorio del dominio puede tener su propia política de repositorio. Si hay una política de dominio y una política de repositorio, ambas se evalúan al determinar si se permite o deniega una solicitud a un CodeArtifact repositorio. Las políticas de dominio y repositorio se evalúan mediante las siguientes reglas:
+ No se evalúa ninguna política de recursos al realizar operaciones a nivel de cuenta, como [ListDomains](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListDomains.html)o. [ListRepositories](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListRepositories.html)
+ No se evalúa ninguna política de repositorio al realizar operaciones a nivel de dominio, como o. [DescribeDomain[ListRepositoriesInDomain](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListRepositoriesInDomain.html)](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DescribeDomain.html)
+ La política de dominio no se evalúa cuando se ejecuta. [PutDomainPermissionsPolicy](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PutDomainPermissionsPolicy.html) Tenga en cuenta que esta regla impide los bloqueos.
+ La política de dominio se evalúa cuando se [PutRepositoryPermissionsPolicy](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PutRepositoryPermissionsPolicy.html)ejecuta, pero la política de repositorio no se evalúa.
+ Una denegación explícita en cualquier política invalida cualquier permiso de otra política.
+ Solo se requiere un permiso explícito en una política de recursos. Omitir una acción de una política de repositorio no implicará una denegación implícita si la política de dominio permite la acción.
+ Cuando ninguna política de recursos permite una acción, el resultado es una denegación implícita, a menos que la cuenta de la entidad principal que realiza la llamada sea la cuenta del propietario del dominio o del administrador del repositorio y una política basada en la identidad permita la acción.

 Las políticas de recursos son opcionales cuando se utilizan para conceder el acceso en un escenario de una sola cuenta, en el que la cuenta de la persona que realiza la llamada utilizada para acceder a un repositorio es la misma que la del propietario del dominio y la del administrador del repositorio. Las políticas de recursos son obligatorias para conceder el acceso en un escenario de varias cuentas, en el que la cuenta de la persona que realiza la llamada no es la misma que la del propietario del dominio o la del administrador del repositorio. *El acceso entre cuentas CodeArtifact sigue las reglas generales de IAM para el acceso entre cuentas, tal como se describe en [Determinar si se permite una solicitud entre cuentas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html#policy-eval-cross-account) en la Guía del usuario de IAM.*
+ A la entidad principal de la cuenta del propietario del dominio se le puede conceder acceso a cualquier repositorio del dominio mediante una política basada en la identidad. Tenga en cuenta que, en este caso, no se requiere ningún permiso explícito en una política de dominio o repositorio.
+ A la entidad principal de la cuenta del propietario del dominio se le puede conceder acceso a cualquier repositorio mediante una política de dominio o de repositorio. Tenga en cuenta que, en este caso, una política basada en la identidad no requiere ningún permiso explícito.
+ A la entidad principal de la cuenta del administrador del repositorio se le puede conceder acceso al repositorio mediante una política basada en la identidad. Tenga en cuenta que, en este caso, no se requiere ningún permiso explícito en una política de dominio o repositorio.
+ A la entidad principal de otra cuenta solo se le concede acceso cuando lo permiten al menos una política de recursos y al menos una política basada en la identidad, sin que ninguna política deniegue explícitamente la acción.