

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
<a name="repo-policies"></a>

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](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based) e [Políticas baseadas em identidade e Políticas baseadas em recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html).

## Crie uma política de recursos para conceder acesso de leitura
<a name="creating-a-resource-policy-to-grant-read-access"></a>

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.

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

****  

```
{
    "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 a permissão `codeartifact:GetAuthorizationToken` à entidade principal. 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](domain-policies.md#domain-policy-example).

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

------
#### [ 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": "*"
        }
    ]
}
```

------

## Definir uma política
<a name="setting-a-policy"></a>

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 saída:

```
{
    "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
<a name="reading-a-policy"></a>

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 saída:

------
#### [ 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": "*"
        }
    ]
}
```

------

## Excluir uma política
<a name="deleting-a-policy"></a>

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
<a name="granting-read-access-to-specific-principals"></a>

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

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

****  

```
{
    "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 name="granting-write-access-to-specific-packages"></a>

 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 do CodeArtifact pacote ARNs é 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`.

------
#### [ 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 permissão para publicar versões NuGet do Maven e do pacote, adicione as seguintes permissões além de`codeartifact:PublishPackageVersion`.  
NuGet: `codeartifact:ReadFromRepository` e especifique o recurso do repositório
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
<a name="granting-write-access-to-a-repository"></a>

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

------
#### [ 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/*"
        }
    ]
}
```

------

## Interação entre políticas de repositório e domínio
<a name="interaction-repo-domain-policies"></a>

 CodeArtifact oferece suporte a políticas de recursos em domínios e repositórios. Políticas de recursos são opcionais. Cada domínio pode ter uma política e cada repositório no domínio pode ter a 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 [ListDomains](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListDomains.html)ou. [ListRepositories](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListRepositories.html)
+ Nenhuma política de repositório é avaliada ao realizar operações em nível de domínio, como ou. [DescribeDomain[ListRepositoriesInDomain](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListRepositoriesInDomain.html)](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DescribeDomain.html)
+ A política de domínio não é avaliada durante a execução [PutDomainPermissionsPolicy](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PutDomainPermissionsPolicy.html). Essa regra evita bloqueios.
+ A política de domínio é avaliada durante a execução [PutRepositoryPermissionsPolicy](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PutRepositoryPermissionsPolicy.html), mas a política do repositório não é avaliada.
+ Uma negação explícita em qualquer política anula 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 da entidade principal da 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, na qual 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 obrigatórias para conceder acesso em um cenário de várias contas, na qual a conta do chamador não é a mesma que a conta do proprietário do domínio ou 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html#policy-eval-cross-account) no Guia do usuário do *IAM*.
+ Uma entidade 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. Nesse caso, nenhuma permissão explícita é necessária em uma política de domínio ou repositório.
+ Uma entidade 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.
+ Uma entidade principal na conta do administrador do repositório pode ter acesso ao repositório por meio de uma política baseada em identidade. Nesse caso, nenhuma permissão explícita é necessária em uma política de domínio ou repositório.
+ Uma entidade 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.