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:
-
Prepare uma lista dos recursos que você planeja provisionar usando CloudFormation.
-
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.
-
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
Resourcelista 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:GetObjectVersiones3:PutObjectexigem um tipo de recurso de objeto S3 es3:GetBucketVersioningrequer 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
Principallista 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
Conditionelemento restringe ainda mais o acesso ao bucket do S3 para que somente oDeployfiles_buildCodeBuild projeto, oDeployment-PipelineCodePipeline 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}/*'