

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

# CodeBuild가 다른 AWS 서비스와 상호 작용하도록 허용
<a name="setting-up-service-role"></a>

의 단계에 따라 AWS CodeBuild 에 처음 [콘솔을 사용하여 시작하기](getting-started-overview.md#getting-started) 액세스하는 경우이 주제의 정보가 필요하지 않을 가능성이 높습니다. 그러나 CodeBuild를 계속 사용하면 CodeBuild가 다른 AWS 서비스와 상호 작용하도록 허용하는 등의 작업을 수행할 수 있습니다.

CodeBuild가 사용자를 대신하여 종속 AWS 서비스와 상호 작용하도록 허용하려면 AWS CodeBuild 서비스 역할이 필요합니다. CodeBuild 또는 AWS CodePipeline 콘솔을 사용하면 CodeBuild 서비스 역할을 생성할 수 있습니다. 자세한 내용은 다음을 참조하세요.
+ [빌드 프로젝트 만들기(콘솔)](create-project.md#create-project-console)
+ [CodeBuild를 사용하는 파이프라인 생성(CodePipeline 콘솔)](how-to-create-pipeline-console.md)
+ [CodeBuild 빌드 작업을 파이프라인에 추가(CodePipeline 콘솔)](how-to-create-pipeline-add.md)
+ [빌드 프로젝트 설정 변경(콘솔)](change-project.md#change-project-console)

이러한 콘솔을 사용하지 않을 사용자를 위해 이 섹션에서는 IAM 콘솔 또는 AWS CLI를 사용하여 CodeBuild 서비스 역할을 생성하는 방법을 설명합니다.

**중요**  
CodeBuild에서는 사용자를 대신하여 수행되는 모든 작업에 대해 서비스 역할을 사용합니다. 역할에 사용자에게 불필요한 권한이 포함되어 있는 경우 사용자의 권한을 실수로 에스컬레이션할 수 있습니다. 이 역할은 [최소 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)을 부여해야 합니다.  
이 페이지에서 설명하는 서비스 역할에는 CodeBuild를 사용하기 위해 필요한 최소한의 권한을 부여하는 정책이 포함되어 있습니다. 사용 사례에 따라 다른 권한을 추가해야 할 수 있습니다.<a name="setting-up-service-role-console"></a>

**CodeBuild 서비스 역할을 생성하려면(콘솔)**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

   다음 중 하나를 사용하여 콘솔에 이미 로그인되어 있어야 합니다.
   +  AWS 루트 계정. 이는 권장하지 않습니다. 자세한 내용은 사용 설명서의 [AWS 계정 루트 사용자](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html)를 참조하세요.**
   +  AWS 계정의 관리자 사용자입니다. 자세한 내용은 사용 *설명서*의 [첫 번째 AWS 계정 루트 사용자 및 그룹 생성을 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html).
   +  AWS 계정에서 다음과 같은 최소 작업 세트를 수행할 수 있는 권한이 있는 사용자:

     ```
     iam:AddRoleToInstanceProfile
     iam:AttachRolePolicy
     iam:CreateInstanceProfile
     iam:CreatePolicy
     iam:CreateRole
     iam:GetRole
     iam:ListAttachedRolePolicies
     iam:ListPolicies
     iam:ListRoles
     iam:PassRole
     iam:PutRolePolicy
     iam:UpdateAssumeRolePolicy
     ```

     자세한 내용은 사용 설명서의 [IAM 정책 개요](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)를 참조하세요.**

1. 탐색 창에서 **Policies**를 선택합니다.

1. **정책 생성**을 선택하세요.

1. [**Create Policy**] 페이지에서 [**JSON**]을 선택합니다.

1. JSON 정책에 대해 다음을 입력한 다음 **정책 검토**를 선택합니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "CloudWatchLogsPolicy",
         "Effect": "Allow",
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents"
         ],
         "Resource": "*"
       },
       {
         "Sid": "CodeCommitPolicy",
         "Effect": "Allow",
         "Action": [
           "codecommit:GitPull"
         ],
         "Resource": "*"
       },
       {
         "Sid": "S3GetObjectPolicy",
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:GetObjectVersion"
         ],
         "Resource": "*"
       },
       {
         "Sid": "S3PutObjectPolicy",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject"
         ],
         "Resource": "*"
       },
       {
         "Sid": "ECRPullPolicy",
         "Effect": "Allow",
         "Action": [
           "ecr:BatchCheckLayerAvailability",
           "ecr:GetDownloadUrlForLayer",
           "ecr:BatchGetImage"
         ],
         "Resource": "*"
       },
       {
         "Sid": "ECRAuthPolicy",
         "Effect": "Allow",
         "Action": [
           "ecr:GetAuthorizationToken"
         ],
         "Resource": "*"
       },
       {
         "Sid": "S3BucketIdentity",
         "Effect": "Allow",
         "Action": [
           "s3:GetBucketAcl",
           "s3:GetBucketLocation"
         ],
         "Resource": "*"
       }
     ]
   }
   ```

------
**참고**  
이 정책에는 잠재적으로 많은 수의 AWS 리소스에 대한 액세스를 허용하는 문이 포함되어 있습니다. 가 특정 AWS 리소스에 액세스 AWS CodeBuild 하도록 제한하려면 `Resource` 배열의 값을 변경합니다. 자세한 내용은 AWS 서비스에 대한 보안 설명서를 참조하세요.

1. **정책 검토** 페이지의 **정책 이름**에 정책의 이름(예: **CodeBuildServiceRolePolicy**)을 입력한 후 **정책 생성**을 선택합니다.
**참고**  
다른 이름을 사용하는 경우 이 절차 전체에서 해당 이름을 사용해야 합니다.

1. 탐색 창에서 **Roles**를 선택합니다.

1. **역할 생성(Create role)**을 선택합니다.

1. **역할 생성** 페이지에서 **AWS 서비스**가 이미 선택되어 있으면 **CodeBuild**를 선택하고 **다음: 권한**을 선택합니다.

1. **권한 정책 연결** 페이지에서 **CodeBuildServiceRolePolicy**를 선택한 후 **다음: 검토**를 선택합니다.

1. **역할 생성 및 검토** 페이지의 **역할 이름**에 역할의 이름(예: **CodeBuildServiceRole**)을 입력한 후 **역할 생성**을 선택합니다.<a name="setting-up-service-role-cli"></a>

**CodeBuild 서비스 역할을 생성하려면(AWS CLI)**

1. 이전 절차에서 설명한 대로 IAM 엔터티 중 하나에 해당하는 AWS 액세스 키 및 AWS 보안 액세스 키 AWS CLI 로를 구성했는지 확인합니다. 자세한 내용은AWS Command Line Interface 사용 설명서의 [AWS Command Line Interface설정](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)을 참조하세요.**

1.  AWS CLI 가 설치된 로컬 워크스테이션 또는 인스턴스의 빈 디렉터리에서 `create-role.json` 및 라는 두 개의 파일을 생성합니다`put-role-policy.json`. 다른 파일 이름을 선택하는 경우 이 절차 전체에서 해당 이름으로 바꿉니다.

   `create-role.json`:

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "codebuild.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------
**참고**  
[혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)로부터 자신을 보호하기 위하여 `aws:SourceAccount` 및 `aws:SourceArn` 조건 키를 사용할 것을 권장합니다. 예를 들어 다음 조건 블록을 사용해서 이전 신뢰 정책을 편집할 수 있습니다. `aws:SourceAccount`는 CodeBuild 프로젝트의 소유자이고 `aws:SourceArn`은 CodeBuild 프로젝트 ARN입니다.

   서비스 역할을 AWS 계정으로 제한하려는 경우는 다음과 비슷할 `create-role.json` 수 있습니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "codebuild.amazonaws.com"
               },
               "Action": "sts:AssumeRole",
               "Condition": {
                   "StringEquals": {
                       "aws:SourceAccount": [
                           "{{111122223333}}"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

   서비스 역할을 특정 CodeBuild 프로젝트로 제한하려는 경우 `create-role.json`이 다음과 비슷할 수 있습니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "codebuild.amazonaws.com"
               },
               "Action": "sts:AssumeRole",
               "Condition": {
                   "StringEquals": {
                       "aws:SourceArn": "arn:aws:codebuild:us-east-1:{{111122223333}}:project/MyProject"
                   }
               }
           }
       ]
   }
   ```

------
**참고**  
CodeBuild 프로젝트의 이름을 모르거나 아직 결정하지 않은 상태에서 특정 ARN 패턴에 대한 신뢰 정책 제한을 적용하려면 ARN의 해당 부분을 와일드카드(\*)로 바꿀 수 있습니다. 프로젝트를 생성한 후 신뢰 정책을 업데이트할 수 있습니다.

   `put-role-policy.json`:

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "CloudWatchLogsPolicy",
         "Effect": "Allow",
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents"
         ],
         "Resource": "*"
       },
       {
         "Sid": "CodeCommitPolicy",
         "Effect": "Allow",
         "Action": [
           "codecommit:GitPull"
         ],
         "Resource": "*"
       },
       {
         "Sid": "S3GetObjectPolicy",
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:GetObjectVersion"
         ],
         "Resource": "*"
       },
       {
         "Sid": "S3PutObjectPolicy",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject"
         ],
         "Resource": "*"
       },
       {
         "Sid": "S3BucketIdentity",
         "Effect": "Allow",
         "Action": [
           "s3:GetBucketAcl",
           "s3:GetBucketLocation"
         ],
         "Resource": "*"
       }
     ]
   }
   ```

------
**참고**  
이 정책에는 잠재적으로 많은 수의 AWS 리소스에 대한 액세스를 허용하는 문이 포함되어 있습니다. 가 특정 AWS 리소스에 액세스 AWS CodeBuild 하도록 제한하려면 `Resource` 배열의 값을 변경합니다. 자세한 내용은 AWS 서비스에 대한 보안 설명서를 참조하세요.

1. 앞의 파일을 저장한 디렉터리로 전환한 다음, 다음 두 가지 명령을 다음 순서로 한 번에 하나씩 실행합니다. `CodeBuildServiceRole`과 `CodeBuildServiceRolePolicy`에 다른 값을 사용하려면 여기에서 사용해야 합니다.

   ```
   aws iam create-role --role-name CodeBuildServiceRole --assume-role-policy-document file://create-role.json
   ```

   ```
   aws iam put-role-policy --role-name CodeBuildServiceRole --policy-name CodeBuildServiceRolePolicy --policy-document file://put-role-policy.json
   ```