Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Configuration des autorisations de moindre privilège pour les ressources fournies via CloudFormation
AWS CloudFormation vous permet de fournir de nombreux types de AWS ressources différents. Les ressources provisionnées nécessitent leur propre ensemble d'autorisations pour fonctionner comme prévu et pour configurer qui a accès à ces ressources. Le chapitre précédent a examiné les options de configuration des autorisations d'accès et d'utilisation du CloudFormation service. Ce chapitre explique comment appliquer le principe du moindre privilège aux ressources mises en service via CloudFormation.
Dans ce guide, il serait pratiquement impossible de passer en revue les recommandations de sécurité et les meilleures pratiques pour chaque type de AWS ressource pouvant être provisionnée. CloudFormation Si vous avez des questions concernant un service spécifique, nous vous recommandons de consulter la documentation relative à ce service. La plupart des Service AWS documents contiennent une section sur la sécurité et des informations sur les autorisations requises pour utiliser ce service. Pour une liste complète de la Service AWS documentation, consultez AWS la section Documentation.
Voici des étapes de haut niveau, indépendantes des services, que vous pouvez suivre pour créer des CloudFormation modèles conformes au principe du moindre privilège :
-
Préparez une liste des ressources que vous prévoyez de fournir en utilisant CloudFormation.
-
Consultez la AWS documentation des services correspondants et consultez les sections relatives à la sécurité et à la gestion des accès. Cela vous permet de comprendre les exigences et les recommandations spécifiques au service.
-
Utilisez les informations que vous avez recueillies au cours des étapes précédentes pour concevoir des CloudFormation modèles et des politiques associées qui n'autorisent que les autorisations requises et refusent toutes les autres.
Ce guide passe ensuite en revue un exemple de la manière dont vous pouvez appliquer le principe du moindre privilège dans les CloudFormation modèles, en utilisant un cas d'utilisation réel.
Exemple : compartiment Amazon S3 pour stocker les artefacts du pipeline
Cet exemple crée un bucket Amazon Simple Storage Service (Amazon S3) qui est utilisé pour AWS CodeBuildstocker les artefacts du projet. AWS CodePipelineutilise ces artefacts stockés. Vous pouvez autoriser CodeBuild et accéder CodePipeline à ce compartiment S3 via des rôles de service, et vous contrôlez cet accès en utilisant une politique de compartiment Amazon S3. Les noms de ressources utilisés dans cet exemple sont les suivants :
-
Deployfiles_buildest le nom du CodeBuild projet. -
Deployment-Pipelineest le nom du pipeline dans CodePipeline.
Définition du compartiment Amazon S3
Vous devez d'abord définir le compartiment S3 dans le CloudFormation modèle, qui est un fichier texte au format YAML.
amzn-s3-demo-bucket: Type: AWS::S3::Bucket Properties: PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true
Définition de la politique relative aux compartiments Amazon S3
Ensuite, dans le CloudFormation modèle, vous créez une politique de compartiment qui autorise uniquement le Deployfiles_build projet et le Deployment-Pipeline pipeline à accéder au compartiment.
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/*'
Notez ce qui suit à propos de cette politique de compartiment :
-
L'
Resourceélément répertorie deux types de ressources différents qui utilisent les formats Amazon Resource Name (ARN) suivants :-
Le format ARN d'un objet S3 est
arn:$.<Partition>:s3:::$<BucketName>/$<ObjectName> -
Le format ARN d'un compartiment S3 est
arn:$.<Partition>:s3:::$<BucketName>
s3:GetObjects3:GetObjectVersion, ets3:PutObjectnécessitent un type de ressource d'objet S3, ainsis3:GetBucketVersioningqu'un type de ressource de compartiment S3. Pour plus d'informations sur les types de ressources requis pour chaque action, consultez Actions, ressources et clés de condition pour Amazon S3. -
-
L'
Principalélément répertorie les entités autorisées à effectuer les actions Amazon S3 définies dans la déclaration. Dans ce cas, seuls CodeBuild et CodePipeline sont autorisés à effectuer ces actions. -
L'
Conditionélément restreint davantage l'accès au compartiment S3 afin que seuls leDeployfiles_buildCodeBuild projet, leDeployment-PipelineCodePipeline pipeline et les actions du pipeline puissent accéder au compartiment.
Création des rôles de service
Bien que la politique du compartiment contrôle l'accès au compartiment, elle n'accorde aucune autorisation CodePipeline pour CodeBuild y accéder. Pour accorder l'accès, vous devez créer un rôle de service pour chaque service et ajouter l'instruction suivante à chacun d'eux. Les rôles des services pour CodeBuild et CodePipeline permettent aux services d'accéder au compartiment S3 et à ses objets.
Sid: "ViewAccessToS3ArtifactRepo" Effect: Allow Action: - ‘s3:GetObject' - ‘s3:GetObjectVersion' - ‘s3:PutObject' - ‘s3:GetBucketVersioning' Resource: - !Sub ‘arn:aws:s3:::${BuildArtifactsBucket}' - !Sub ‘arn:aws:s3:::${BuildArtifactsBucket}/*'