

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

# Configurando permissões de privilégio mínimo para recursos provisionados por meio de CloudFormation
<a name="permissions-cloudformation-provisioned-resources"></a>

AWS CloudFormation permite provisionar vários tipos diferentes de AWS recursos. Os recursos provisionados exigem seu próprio conjunto de permissões para funcionar conforme o esperado e para configurar quem tem acesso a esses recursos. O capítulo anterior analisou as opções para configurar permissões para acessar e usar o CloudFormation serviço. Este capítulo analisa como você pode aplicar o princípio do menor privilégio aos recursos provisionados por meio de. CloudFormation

Neste guia, seria praticamente impossível revisar as recomendações de segurança e as melhores práticas para cada tipo de AWS recurso que pode ser provisionado. CloudFormation Se você tiver dúvidas relacionadas a um serviço específico, recomendamos revisar a documentação desse serviço. A maioria dos AWS service (Serviço da AWS) documentos contém uma seção de segurança e informações sobre as permissões necessárias para usar esse serviço. Para obter uma lista completa da documentação de AWS service (Serviço da AWS) , consulte a [documentação da AWS](https://docs.aws.amazon.com/index.html).

A seguir estão as etapas de alto nível, independentes de serviços, que você pode seguir para criar CloudFormation modelos que sigam o princípio do privilégio mínimo:

1. Prepare uma lista dos recursos que você planeja provisionar usando CloudFormation.

1. Consulte a [documentação da AWS](https://docs.aws.amazon.com/index.html) dos serviços correspondentes e revise as seções sobre segurança e gerenciamento de acesso. Isso ajuda a compreender as recomendações e os requisitos específicos do serviço.

1. Use as informações coletadas nas etapas anteriores para criar CloudFormation modelos e políticas associadas que permitam somente as permissões necessárias e neguem todas as outras.

A seguir, este guia analisa um exemplo de como você pode aplicar o princípio do privilégio mínimo em CloudFormation modelos, usando um caso de uso real.

## Exemplo: bucket do Amazon S3 para armazenar artefatos de um pipeline
<a name="example-s3-bucket"></a>

Este exemplo cria um bucket do [Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) que é usado para armazenar artefatos do projeto do [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html). O [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) usa esses artefatos armazenados. Você pode permitir CodeBuild e CodePipeline acessar esse bucket do S3 por meio de funções de serviço e controlar esse acesso usando uma política de bucket do Amazon [S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html). Confira abaixo os nomes dos recursos usados neste exemplo:
+ `Deployfiles_build`é o nome do CodeBuild projeto.
+ `Deployment-Pipeline`é o nome do pipeline em CodePipeline.

*Definir o bucket do Amazon S3*

Primeiro, você define o bucket do S3 no CloudFormation modelo, que é um arquivo de texto formatado em YAML.

```
amzn-s3-demo-bucket:
  Type: AWS::S3::Bucket
  Properties:
    PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
```

*Definir a política de bucket do Amazon S3*

Em seguida, no CloudFormation modelo, você cria uma política de bucket que permite que somente o `Deployfiles_build` projeto e o `Deployment-Pipeline` pipeline acessem o bucket.

```
MyBucketPolicy:
  Type: AWS::S3::BucketPolicy
  Properties: 
    Bucket: !Ref amzn-s3-demo-bucket
    PolicyDocument:
      Version: "2012-10-17"
      Statement:
      - Sid: "S3ArtifactRepoAccess"
        Effect: Allow
        Action: 
          - ‘s3:GetObject'
          - ‘s3:GetObjectVersion'
          - ‘s3:PutObject'
          - ‘s3:GetBucketVersioning'
        Resource: 
          - !Sub ‘arn:aws:s3:::${amzn-s3-demo-bucket}'
          - !Sub ‘arn:aws:s3:::${amzn-s3-demo-bucket}/*'
        Principal:
          Service:
            - codebuild.amazonaws.com
            - codepipeline.amazonaws.com
        Condition:
          StringLike:
            ‘aws:SourceArn':
              - !Sub ‘arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/Deployfiles_build'
              - !Sub ‘arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:Deployment-Pipeline'
              - !Sub ‘arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:Deployment-Pipeline/*'
```

Observe o seguinte sobre essa política de bucket:
+ O elemento `Resource` lista dois tipos diferentes de recursos que usam os seguintes formatos de nome do recurso da Amazon (ARN):
  + O formato ARN de um objeto do S3 é `arn:${{<Partition>}}:s3:::${{<BucketName>}}/${{<ObjectName>}}`.
  + O formato ARN de um bucket do S3 é `arn:${{<Partition>}}:s3:::${{<BucketName>}}`.

  `s3:GetObject`, `s3:GetObjectVersion` e `s3:PutObject` exigem um tipo de recurso de objeto S3 e `s3:GetBucketVersioning ` requer um tipo de recurso de bucket do S3. Para obter mais informações sobre os tipos de recursos necessários para cada ação, consulte [Ações, recursos e chaves de condição do Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html).
+ O elemento `Principal` lista as entidades que têm permissão para realizar as ações do Amazon S3 definidas na declaração. Nesse caso, somente CodeBuild e CodePipeline estão autorizados a realizar essas ações.
+ O `Condition` elemento restringe ainda mais o acesso ao bucket do S3 para que somente o `Deployfiles_build` CodeBuild projeto, o `Deployment-Pipeline` CodePipeline pipeline e as ações do pipeline possam acessar o bucket.

*Criar os perfis de serviço*

Embora a política do bucket controle o acesso ao bucket, ela não concede permissões para CodeBuild e CodePipeline para acessá-lo. Para conceder acesso, você precisa criar um perfil de serviço para cada serviço e adicionar a declaração a seguir a cada um. Os serviços funcionam CodeBuild e CodePipeline permitem que os serviços acessem o bucket do S3 e seus objetos.

```
Sid: "ViewAccessToS3ArtifactRepo"
Effect: Allow
Action: 
  - ‘s3:GetObject'
  - ‘s3:GetObjectVersion'
  - ‘s3:PutObject'
  - ‘s3:GetBucketVersioning'
Resource: 
  - !Sub ‘arn:aws:s3:::${BuildArtifactsBucket}'
  - !Sub ‘arn:aws:s3:::${BuildArtifactsBucket}/*'
```