Políticas de repositorios - CodeArtifact

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

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 el propietario del repositorio tiene acceso a él. 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 y Políticas basadas en identidades y Políticas basadas en recursos.

Cree una política de recursos para conceder el acceso de lectura

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.

{ "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 al menos un codeartifact:GetAuthorizationToken permiso al director. Para ver un ejemplo de una política de dominio completa para otorgar acceso entre cuentas, consulte Ejemplo de políticas de dominio.

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.

{ "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

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.

Resultado 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

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

Resultado de ejemplo:

{ "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

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

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.

{ "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

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 de los CodeArtifact ARN de los paquetes 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.

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

Para conceder permiso para publicar versiones de NuGet paquetes y de Maven, añada además los siguientes permisos. codeartifact:PublishPackageVersion

  1. NuGet: codeartifact:ReadFromRepository y especifique el recurso del repositorio

  2. 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

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.

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

Interacción entre las políticas de repositorio y dominio

CodeArtifact admite las 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 ListDomainso. ListRepositories

  • No se evalúa ninguna política de repositorio al realizar operaciones a nivel de dominio, como o. DescribeDomainListRepositoriesInDomain

  • La política de dominio no se evalúa cuando se ejecuta. PutDomainPermissionsPolicy Tenga en cuenta que esta regla impide los bloqueos.

  • La política de dominio se evalúa cuando se ejecuta PutRepositoryPermissionsPolicy, pero la política de repositorio no se evalúa.

  • Una denegación explícita en cualquier política anula un permiso en 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 lo permite.

  • Cuando ninguna política de recursos permite una acción, el resultado es una denegación implícita, a menos que la cuenta del autor de 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 llama utilizada para acceder a un repositorio es la misma que la del propietario del dominio y la del administrador del repositorio. Se requieren políticas de recursos para conceder el acceso en un escenario multicuenta en el que la cuenta de la persona que llama 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 en la Guía del usuario de IAM.

  • Al titular 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. Ten en cuenta que, en este caso, no se requiere ningún permiso explícito en una política de dominio o repositorio.

  • Al titular de la cuenta del propietario del dominio se le puede conceder acceso a cualquier repositorio mediante una política de dominio o repositorio. Tenga en cuenta que, en este caso, una política basada en la identidad no requiere un permiso explícito.

  • A un titular de la cuenta de 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 un titular 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 niegue explícitamente la acción.