기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
CloudFormation을 통해 프로비저닝된 리소스에 대한 최소 권한 구성
AWS CloudFormation 를 사용하면 다양한 유형의 AWS 리소스를 프로비저닝할 수 있습니다. 의도한 대로 작동하고 해당 리소스에 액세스할 수 있는 사용자를 구성하려면 프로비저닝된 리소스에 자체 권한 세트가 필요합니다. 이전 장에서는 CloudFormation 서비스에 액세스하고 이를 사용할 권한을 구성하는 옵션을 검토했습니다. 이 장에서는 CloudFormation을 통해 프로비저닝된 리소스에 최소 권한 원칙을 적용하는 방법을 검토합니다.
이 가이드에서는 CloudFormation을 통해 프로비저닝할 수 있는 모든 유형의 AWS 리소스에 대한 보안 권장 사항 및 모범 사례를 검토하는 것이 사실상 불가능합니다. 특정 서비스와 관련된 질문이 있는 경우 해당 서비스에 대한 설명서를 검토하는 것이 좋습니다. 대부분의 AWS 서비스 문서에는 보안 섹션과 해당 서비스를 사용하는 데 필요한 권한에 대한 정보가 포함되어 있습니다. AWS 서비스 설명서의 전체 목록은 AWS 설명서를 참조하세요.
다음은 최소 권한 원칙을 준수하는 CloudFormation 템플릿을 생성하기 위해 수행할 수 있는 높은 수준의 단계(서비스에 구애받지 않음)입니다.
-
CloudFormation을 사용하여 프로비저닝하려는 리소스 목록을 준비합니다.
-
해당 서비스에 대한 AWS 설명서를 참조하고 보안 및 액세스 관리에 대한 섹션을 검토하세요. 그러면 서비스별 요구 사항 및 권장 사항을 이해하는 데 도움이 됩니다.
-
이전 단계에서 수집한 정보를 사용하여 필요한 권한만 허용하고 다른 모든 권한은 거부하는 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:GetObjectVersion및s3:PutObject에는 S3 객체 리소스 유형이 필요하고s3:GetBucketVersioning에는 S3 버킷 리소스 유형이 필요합니다. 각 작업에 필요한 리소스 유형에 대한 자세한 내용은 Actions, resources, and condition keys for Amazon S3를 참조하세요. -
-
Principal요소는 명령문에 정의된 Amazon S3 작업을 수행할 수 있는 엔터티를 나열합니다. 이 경우 CodeBuild 및 CodePipeline만 이러한 작업을 수행할 수 있습니다. -
Condition요소는Deployfiles_buildCodeBuild 프로젝트,Deployment-PipelineCodePipeline 파이프라인 및 파이프라인 작업만 버킷에 액세스할 수 있도록 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}/*'