Políticas de repositório - CodeArtifact

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Políticas de repositório

CodeArtifact usa permissões baseadas em recursos para controlar o acesso. Com as permissões baseadas em recursos, você pode especificar quem tem acesso a um repositório e quais ações essas pessoas podem realizar nele. Por padrão, somente o proprietário do repositório tem acesso a ele. Você pode aplicar um documento de política que permite que outras entidades principais do IAM acessem o repositório.

Para obter mais informações, consulte Políticas baseadas em recursos e Políticas baseadas em identidade e Políticas baseadas em recursos.

Crie uma política de recursos para conceder acesso de leitura

Uma política de recursos é um arquivo de texto no formato JSON. O arquivo deve especificar uma entidade principal (ator), uma ou mais ações e um efeito (Allow ou Deny). Por exemplo, a política de recursos a seguir concede à conta 123456789012 permissão para baixar pacotes do repositório.

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

Como a política é avaliada somente para operações no repositório ao qual está anexada, não é necessário especificar um recurso. Como o recurso está implícito, você pode definir Resource como *. Para que um gerenciador de pacotes baixe um pacote desse repositório, será necessário também criar uma política de domínio para acesso entre contas. A política de domínio deve conceder pelo menos codeartifact:GetAuthorizationToken permissão ao diretor. Para obter um exemplo de uma política completa de domínio para conceder acesso entre contas, consulte Exemplo de políticas de domínio.

nota

A ação codeartifact:ReadFromRepository só pode ser usada em um recurso do repositório. Você não pode colocar o nome do recurso da Amazon (ARN) de um pacote como um recurso com codeartifact:ReadFromRepository como a ação para permitir acesso de leitura a um subconjunto de pacotes em um repositório. Uma determinada entidade principal pode ler todos os pacotes em um repositório ou nenhum deles.

Como a única ação especificada no repositório é ReadFromRepository, usuários e funções da conta 1234567890 podem baixar pacotes do repositório. No entanto, eles não podem realizar outras ações neles (por exemplo, listar nomes e versões de pacotes). Normalmente, você concede permissões na política a seguir além de ReadFromRepository porque um usuário que baixa pacotes de um repositório também precisa interagir com eles de outras maneiras.

{ "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": "*" } ] }

Definir uma política

Depois de criar um documento de política, use o comando put-repository-permissions-policy para anexá-lo a um repositório:

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

Quando você chama put-repository-permissions-policy, a política de recursos no repositório é ignorada ao avaliar as permissões. Isso garante que o proprietário de um domínio não possa se bloquear do repositório, o que impediria que ele pudesse atualizar a política de recursos.

nota

Você não pode conceder permissões a outra AWS conta para atualizar a política de recursos em um repositório usando uma política de recursos, pois a política de recursos é ignorada durante a chamada put-repository-permissions-policy.

Exemplo de resultado:

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

A saída do comando contém o nome do recurso da Amazon (ARN) do recurso do repositório, o conteúdo completo do documento de política e um identificador de revisão. Você pode passar o identificador de revisão para put-repository-permissions-policy usando a opção --policy-revision. Isso garante que uma revisão conhecida do documento seja sobrescrita e não uma versão mais recente definida por outro redator.

Ler uma política

Use o comando get-repository-permissions-policy para ler uma versão existente de um documento de política. Para formatar a saída para facilitar a leitura, use --output e --query policy.document junto com o módulo json.tool 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

Exemplo de resultado:

{ "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": "*" } ] }

Excluir uma política

Use o comando delete-repository-permissions-policy para excluir uma política de um repositório.

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

O formato da saída é o mesmo que o do comando get-repository-permissions-policy.

Conceda acesso de leitura às entidades principais

Ao especificar o usuário raiz de uma conta como entidade principal em um documento de política, você concede acesso a todos os usuários e funções dessa conta. Para limitar o acesso a usuários ou funções selecionados, use o ARN deles na seção Principal da política. Por exemplo, use o seguinte para conceder acesso de leitura ao usuário do IAM bob na conta 123456789012.

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

Conceder acesso de gravação aos pacotes

A ação codeartifact:PublishPackageVersion é usada para controlar a permissão para publicar novas versões de um pacote. O recurso usado com essa ação deve ser um pacote. O formato dos ARNs CodeArtifact do pacote é o seguinte.

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

O exemplo a seguir mostra o ARN de um pacote npm com escopo @parity e nome ui no repositório my_repo no domínio my_domain.

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

O ARN de um pacote npm sem um escopo tem a string vazia para o campo do namespace. O exemplo a seguir mostra o ARN de um pacote sem escopo e com o nome react no repositório my_repo no domínio my_domain.

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

A política a seguir concede permissão 123456789012 à conta para publicar versões de @parity/ui no repositório 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 permissão para publicar versões NuGet do Maven e do pacote, adicione as seguintes permissões além decodeartifact:PublishPackageVersion.

  1. NuGet: codeartifact:ReadFromRepository e especifique o recurso do repositório

  2. Maven: codeartifact:PutPackageMetadata

Como essa política especifica um domínio e um repositório como parte do recurso, ela permite publicar somente quando anexada a esse repositório.

Conceder acesso de gravação a um repositório

Você pode usar curingas para conceder permissão de gravação a todos os pacotes em um repositório. Por exemplo, use a política a seguir para conceder a uma conta permissão para gravar em todos os pacotes no repositório 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/*" } ] }

Interação entre políticas de repositório e domínio

CodeArtifact oferece suporte a políticas de recursos em domínios e repositórios. As políticas de recursos são opcionais. Cada domínio pode ter uma política e cada repositório no domínio pode ter sua própria política de repositório. Se uma política de domínio e uma política de repositório estiverem presentes, ambas serão avaliadas ao determinar se uma solicitação para um CodeArtifact repositório é permitida ou negada. As políticas de domínio e repositório estão sendo avaliadas usando as seguintes regras:

  • Nenhuma política de recursos é avaliada ao realizar operações em nível de conta, como ListDomainsou. ListRepositories

  • Nenhuma política de repositório é avaliada ao realizar operações em nível de domínio, como ou. DescribeDomainListRepositoriesInDomain

  • A política de domínio não é avaliada durante a execução PutDomainPermissionsPolicy. Observe que essa regra evita bloqueios.

  • A política de domínio é avaliada durante a execução PutRepositoryPermissionsPolicy, mas a política do repositório não é avaliada.

  • Uma negação explícita em qualquer política substitui uma permissão em outra política.

  • Uma permissão explícita só é necessária em uma política de recursos. A omissão de uma ação de uma política de repositório não resultará em uma negação implícita se a política de domínio permitir a ação.

  • Quando nenhuma política de recursos permite uma ação, o resultado é uma negação implícita, a menos que a conta do responsável pela chamada seja a conta do proprietário do domínio ou do administrador do repositório e uma política baseada em identidade permita a ação.

As políticas de recursos são opcionais quando usadas para conceder acesso em um cenário de conta única, em que a conta do chamador usada para acessar um repositório é a mesma que a conta do proprietário do domínio e do administrador do repositório. As políticas de recursos são necessárias para conceder acesso em um cenário entre contas em que a conta do chamador não é a mesma do proprietário do domínio ou da conta do administrador do repositório. O acesso entre contas CodeArtifact segue as regras gerais do IAM para acesso entre contas, conforme descrito em Determinando se uma solicitação entre contas é permitida no Guia do usuário do IAM.

  • Um principal na conta do proprietário do domínio pode ter acesso a qualquer repositório no domínio por meio de uma política baseada em identidade. Observe que, nesse caso, nenhuma permissão explícita é necessária em uma política de domínio ou repositório.

  • Um principal na conta do proprietário do domínio pode ter acesso a qualquer repositório por meio de uma política de domínio ou repositório. Observe que, nesse caso, nenhuma permissão explícita é necessária em uma política baseada em identidade.

  • Um principal na conta de administrador do repositório pode ter acesso ao repositório por meio de uma política baseada em identidade. Observe que, nesse caso, nenhuma permissão explícita é necessária em uma política de domínio ou repositório.

  • Um principal em outra conta só recebe acesso quando permitido por pelo menos uma política de recursos e pelo menos uma política baseada em identidade, sem nenhuma política que negue explicitamente a ação.