View a markdown version of this page

Configurando permissões de privilégio mínimo para recursos provisionados por meio de CloudFormation - AWS Orientação prescritiva

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

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.

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.

  2. Consulte a documentação da AWS 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.

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

Este exemplo cria um bucket do Amazon Simple Storage Service (Amazon S3) que é usado para armazenar artefatos do projeto do AWS CodeBuild. O AWS CodePipeline 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. 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.

  • 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}/*'