View a markdown version of this page

CloudFormation을 통해 프로비저닝된 리소스에 대한 최소 권한 구성 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

CloudFormation을 통해 프로비저닝된 리소스에 대한 최소 권한 구성

AWS CloudFormation 를 사용하면 다양한 유형의 AWS 리소스를 프로비저닝할 수 있습니다. 의도한 대로 작동하고 해당 리소스에 액세스할 수 있는 사용자를 구성하려면 프로비저닝된 리소스에 자체 권한 세트가 필요합니다. 이전 장에서는 CloudFormation 서비스에 액세스하고 이를 사용할 권한을 구성하는 옵션을 검토했습니다. 이 장에서는 CloudFormation을 통해 프로비저닝된 리소스에 최소 권한 원칙을 적용하는 방법을 검토합니다.

이 가이드에서는 CloudFormation을 통해 프로비저닝할 수 있는 모든 유형의 AWS 리소스에 대한 보안 권장 사항 및 모범 사례를 검토하는 것이 사실상 불가능합니다. 특정 서비스와 관련된 질문이 있는 경우 해당 서비스에 대한 설명서를 검토하는 것이 좋습니다. 대부분의 AWS 서비스 문서에는 보안 섹션과 해당 서비스를 사용하는 데 필요한 권한에 대한 정보가 포함되어 있습니다. AWS 서비스 설명서의 전체 목록은 AWS 설명서를 참조하세요.

다음은 최소 권한 원칙을 준수하는 CloudFormation 템플릿을 생성하기 위해 수행할 수 있는 높은 수준의 단계(서비스에 구애받지 않음)입니다.

  1. CloudFormation을 사용하여 프로비저닝하려는 리소스 목록을 준비합니다.

  2. 해당 서비스에 대한 AWS 설명서를 참조하고 보안 및 액세스 관리에 대한 섹션을 검토하세요. 그러면 서비스별 요구 사항 및 권장 사항을 이해하는 데 도움이 됩니다.

  3. 이전 단계에서 수집한 정보를 사용하여 필요한 권한만 허용하고 다른 모든 권한은 거부하는 CloudFormation 템플릿 및 관련 정책을 설계합니다.

다음으로 이 가이드에서는 실제 사용 사례를 사용하여 CloudFormation 템플릿에 최소 권한 원칙을 적용하는 방법에 대한 예제를 검토합니다.

예제: 파이프라인에 대한 아티팩트를 저장하는 데 사용되는 Amazon S3 버킷

이 예제에서는 AWS CodeBuild 프로젝트 아티팩트를 저장하는 데 사용되는 Amazon Simple Storage Service(Amazon S3) 버킷을 생성합니다. AWS CodePipeline은 이러한 저장된 아티팩트를 사용합니다. CodeBuild 및 CodePipeline이 서비스 역할을 통해 이 S3 버킷에 액세스하도록 허용하고 Amazon S3 버킷 정책을 사용하여 해당 액세스를 제어할 수 있습니다. 다음은 이 예제에서 사용되는 리소스 이름입니다.

  • Deployfiles_build는 CodeBuild 프로젝트 이름입니다.

  • Deployment-Pipeline은 CodePipeline의 파이프라인 이름입니다.

Amazon S3 버킷 정의

먼저 YAML 형식의 텍스트 파일인 CloudFormation 템플릿에서 S3 버킷을 정의합니다.

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

Amazon S3 버킷 정책 정의

그런 다음 CloudFormation 템플릿에서 Deployfiles_build 프로젝트와 Deployment-Pipeline 파이프라인만 버킷에 액세스하도록 허용하는 버킷 정책을 생성합니다.

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

이 버킷 정책에 대한 다음 세부 정보를 참고하세요.

  • Resource 요소는 다음 Amazon 리소스 이름(ARN) 형식을 사용하는 두 가지 서로 다른 리소스 유형을 나열합니다.

    • S3 객체의 ARN 형식은 arn:$<Partition>:s3:::$<BucketName>/$<ObjectName>입니다.

    • S3 버킷의 ARN 형식은 arn:$<Partition>:s3:::$<BucketName>입니다.

    s3:GetObject, s3:GetObjectVersions3:PutObject에는 S3 객체 리소스 유형이 필요하고 s3:GetBucketVersioning 에는 S3 버킷 리소스 유형이 필요합니다. 각 작업에 필요한 리소스 유형에 대한 자세한 내용은 Actions, resources, and condition keys for Amazon S3를 참조하세요.

  • Principal 요소는 명령문에 정의된 Amazon S3 작업을 수행할 수 있는 엔터티를 나열합니다. 이 경우 CodeBuild 및 CodePipeline만 이러한 작업을 수행할 수 있습니다.

  • Condition 요소는 Deployfiles_build CodeBuild 프로젝트, Deployment-Pipeline CodePipeline 파이프라인 및 파이프라인 작업만 버킷에 액세스할 수 있도록 S3 버킷에 대한 액세스를 추가로 제한합니다.

서비스 역할 생성

버킷 정책은 버킷에 대한 액세스를 제어하지만 CodeBuild 및 CodePipeline에 버킷에 대한 액세스 권한을 부여하지 않습니다. 액세스 권한을 부여하려면 각 서비스에 대한 서비스 역할을 생성하고 각 서비스에 다음 명령문을 추가해야 합니다. CodeBuild 및 CodePipeline의 서비스 역할은 서비스가 S3 버킷 및 해당 객체에 액세스할 수 있도록 허용합니다.

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