Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Configuración de permisos con privilegios mínimos para los recursos aprovisionados mediante CloudFormation
AWS CloudFormation le permite aprovisionar muchos tipos diferentes de recursos. AWS Los recursos aprovisionados requieren su propio conjunto de permisos para funcionar según lo previsto y para configurar quién tiene acceso a esos recursos. En el capítulo anterior se examinaron las opciones para configurar los permisos de acceso y uso del CloudFormation servicio. En este capítulo se analiza cómo se puede aplicar el principio del privilegio mínimo a los recursos aprovisionados a través CloudFormation de él.
En esta guía, sería prácticamente imposible revisar las recomendaciones de seguridad y las mejores prácticas para todos los tipos de AWS recursos que se pueden aprovisionar. CloudFormation Si tiene preguntas relacionadas con un servicio concreto, le recomendamos revisar la documentación de ese servicio. La mayoría de Servicio de AWS los documentos contienen una sección de seguridad e información sobre los permisos necesarios para usar ese servicio. Para obtener una lista completa de la documentación de Servicio de AWS , consulte la documentación de AWS.
Los siguientes son pasos de alto nivel e independientes del servicio que puede seguir para crear CloudFormation plantillas que cumplan con el principio de privilegios mínimos:
-
Prepare una lista de los recursos que planea aprovisionar mediante el uso de. CloudFormation
-
Consulte la documentación de AWS para ver los servicios correspondientes y revise las secciones acerca de la administración de la seguridad y del acceso. Esto resulta útil para comprender las recomendaciones y los requisitos específicos del servicio.
-
Utilice la información recopilada en los pasos anteriores para diseñar CloudFormation plantillas y políticas asociadas que permitan únicamente los permisos necesarios y denieguen todos los demás.
A continuación, en esta guía se analiza un ejemplo de cómo se puede aplicar el principio de privilegios mínimos en CloudFormation las plantillas, utilizando un caso práctico real.
Ejemplo: bucket de Amazon S3 para almacenar artefactos de canalización.
En este ejemplo, se crea un bucket de Amazon Simple Storage Service (Amazon S3) que se utiliza almacenar los artefactos del proyecto de AWS CodeBuild. AWS CodePipeline utiliza estos artefactos almacenados. Puede permitir CodeBuild y acceder CodePipeline a este bucket de S3 a través de funciones de servicio, y puede controlar ese acceso mediante una política de bucket de Amazon S3. A continuación, se muestran los nombres de los recursos que se utilizan en este ejemplo:
-
Deployfiles_buildes el nombre del CodeBuild proyecto. -
Deployment-Pipelinees el nombre de la tubería en la que se encuentra CodePipeline.
Definición de un bucket de Amazon S3
En primer lugar, defina el bucket de S3 en la CloudFormation plantilla, que es un archivo de texto con formato YAML.
amzn-s3-demo-bucket: Type: AWS::S3::Bucket Properties: PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true
Definición de una política de bucket de Amazon S3
A continuación, en la CloudFormation plantilla, debes crear una política de bucket que permita que solo el Deployfiles_build proyecto y la Deployment-Pipeline canalización accedan al 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/*'
Tenga en cuenta lo siguiente acerca de esta política de bucket:
-
El elemento
Resourcemuestra dos tipos de recursos que utilizan los formatos de nombre de recurso de Amazon (ARN) siguientes:-
El formato de ARN de un objeto de S3 es
arn:$.<Partition>:s3:::$<BucketName>/$<ObjectName> -
El formato de ARN de un bucket de S3 es
arn:$.<Partition>:s3:::$<BucketName>
s3:GetObject,s3:GetObjectVersionys3:PutObjectrequieren un tipo de recurso de objeto de S3 ys3:GetBucketVersioningrequiere un tipo de recurso de bucket de S3. Para más información acerca de los tipos de recurso obligatorios para cada acción, consulte Actions, resources, and condition keys for Amazon S3. -
-
El elemento
Principalmuestra las entidades que pueden realizar las acciones de Amazon S3 definidas en la instrucción. En este caso, solo CodeBuild CodePipeline se les permite realizar estas acciones. -
El
Conditionelemento restringe aún más el acceso al depósito de S3, de modo que solo elDeployfiles_buildCodeBuild proyecto, laDeployment-PipelineCodePipeline canalización y las acciones del canalización pueden acceder al depósito.
Cree los roles de servicio
Si bien la política del depósito controla el acceso al depósito, no concede permisos para CodeBuild acceder CodePipeline a él. Para conceder el acceso, debes crear un rol de servicio para cada servicio y agregar la instrucción siguiente a cada uno. Las funciones de los CodeBuild servicios CodePipeline permiten que los servicios accedan al depósito de S3 y a sus 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}/*'