CodeBuild 프로비저닝 역할 생성 - AWS Proton

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

CodeBuild 프로비저닝 역할 생성

AWS CloudFormation 및 Terraform과 같은 코드형 인프라(IaaC) 도구는 다양한 유형의 AWS 리소스에 대한 권한이 필요합니다. 예를 들어, IaaC 템플릿이 Amazon S3 버킷을 선언하는 경우 Amazon S3 버킷을 생성, 읽기, 업데이트 및 삭제할 수 있는 권한이 필요합니다. 역할을 필요한 최소 권한으로 제한하는 것이 보안 모범 사례로 간주됩니다. AWS 리소스의 범위를 고려할 때 IaaC 템플릿에 대한 최소 권한 정책을 만드는 것은 어렵습니다. 특히 해당 템플릿으로 관리하는 리소스가 나중에 변경될 수 있는 경우에는 더욱 그렇습니다. 예를 들어, AWS Proton이 관리 중인 템플릿의 최근 편집 내용에 RDS 데이터베이스 리소스를 추가합니다.

적절한 권한을 구성하면 IaC를 원활하게 배포하는 데 도움이 됩니다. AWS Proton CodeBuild 프로비저닝은 고객 계정에 있는 CodeBuild 프로젝트에서 고객이 제공한 임의의 CLI 명령을 실행합니다. 일반적으로 이러한 명령은 AWS CDK와 같은 코드형 인프라 (IaaC) 도구를 사용하여 인프라를 생성하고 삭제합니다. CodeBuild 프로비저닝을 사용하는 템플릿의 AWS 리소스가 배포되면 AWS는 AWS에서 관리하는 CodeBuild 프로젝트에서 빌드를 시작합니다. CodeBuild에 역할이 전달되며, CodeBuild는 명령을 실행하는 것으로 가정합니다. CodeBuild 프로비저닝 역할이라고 하는 이 역할은 고객이 제공하며 인프라를 프로비저닝하는 데 필요한 권한을 포함합니다. CodeBuild에서만 가정하도록 되어 있으며 심지어 AWS Proton도 가정할 수도 없습니다.

역할 만들기

CodeBuild 프로비저닝 역할은 IAM 콘솔 또는 AWS CLI에서 생성할 수 있습니다. AWS CLI에서 생성하려면:

aws iam create-role --role-name AWSProtonCodeBuildProvisioning --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"codebuild.amazonaws.com"},"Action":"sts:AssumeRole"}]}' aws iam attach-role-policy --role-name AWSProtonCodeBuildProvisioning --policy-arn arn:aws:iam::aws:policy/AWSProtonCodeBuildProvisioningBasicAccess

또한 CodeBuild 서비스에서 빌드를 실행하는 데 필요한 최소한의 권한이 포함된 AWSProtonCodeBuildProvisioningBasicAccess를 첨부합니다.

콘솔을 사용하려는 경우 역할을 생성할 때 다음 사항을 확인합니다.

  1. 신뢰할 수 있는 엔티티의 경우 AWS 서비스를 선택한 다음 CodeBuild를 선택합니다.

  2. 권한 추가 단계에서 첨부하려는 AWSProtonCodeBuildProvisioningBasicAccess 및 기타 정책을 선택합니다.

관리자 액세스

AdministratorAccess 정책을 CodeBuild 프로비저닝 역할에 연결하면 권한 부족으로 인해 IaaC 템플릿이 실패하지 않도록 보장됩니다. 또한 환경 템플릿 또는 서비스 템플릿을 만들 수 있는 사용자는 관리자가 아니더라도 누구나 관리자 수준의 작업을 수행할 수 있습니다. AWS Proton은 CodeBuild 프로비저닝 역할과 함께 AdministatorAccess를 사용하는 것을 사용하는 것은 권장하지 않습니다. CodeBuild 프로비저닝 역할과 함께 AdministratorAccess을 사용하기로 결정했다면 샌드박스 환경에서 사용합니다.

IAM 콘솔에서 또는 다음 명령을 실행하여 AdministratorAccess이 있는 역할을 만들 수 있습니다.

aws iam create-role --role-name AWSProtonCodeBuildProvisioning --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"codebuild.amazonaws.com"},"Action":"sts:AssumeRole"}]}' aws iam attach-role-policy --role-name AWSProtonCodeBuildProvisioning --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
최소 범위 지정 역할 생성

최소 권한으로 역할을 생성하려는 경우 다음과 같은 여러 가지 방법이 있습니다.

  • 관리자 권한으로 배포한 다음 역할의 범위를 좁히세요. IAM 액세스 분석기를 사용하는 것이 좋습니다.

  • 관리형 정책을 사용하여 사용하려는 서비스에 대한 액세스 권한을 부여하세요.

AWS CDK

AWS Proton와 함께 AWS CDK를 사용하고 각 환경 계정/지역에서 cdk bootstrap을 실행했다면 cdk deploy에 대한 역할이 이미 있습니다. 이 경우 다음 정책을 CodeBuild 프로비저닝 역할에 더하세요.

{ "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::account-id:role/cdk-*-deploy-role-*", "arn:aws:iam::account-id:role/cdk-*-file-publishing-role-*" ], "Effect": "Allow" }
사용자 지정 VPC

사용자 지정 VPC에서 CodeBuild를 실행하기로 결정한 경우 CodeBuild 역할에 다음과 같은 권한이 필요합니다.

{ "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface" ], "Resource": [ "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:security-group/*" ] }, { "Effect": "Allow", "Action": [ "ec2:DeleteNetworkInterface" ], "Resource": [ "arn:aws:ec2:region:account-id:*/*" ] }, { "Effect": "Allow", "Action": [ "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterfacePermission" ], "Resource": "arn:aws:ec2:region:account-id:network-interface/*", "Condition": { "StringEquals": { "ec2:AuthorizedService": "codebuild.amazonaws.com" } } }

AmazonEC2FullAccess 관리형 정책을 사용할 수도 있지만 여기에는 필요하지 않을 수 있는 권한이 포함되어 있습니다. CLI를 사용하여 관리되는 정책을 첨부하려면,

aws iam create-role --role-name AWSProtonCodeBuildProvisioning --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"codebuild.amazonaws.com"},"Action":"sts:AssumeRole"}]}' aws iam attach-role-policy --role-name AWSProtonCodeBuildProvisioning --policy-arn arn:aws:iam::aws:policy/AdministratorAccess