

# EC2 Fleet 사전 조건
<a name="ec2-fleet-prerequisites"></a>

**Topics**
+ [시작 템플릿](#ec2-fleet-prerequisites-launch-template)
+ [EC2 Fleet의 서비스 연결 역할](#ec2-fleet-service-linked-role)
+ [암호화된 AMI 및 EBS 스냅샷에 사용할 고객 관리형 키에 대한 액세스 권한 부여](#ec2-fleet-service-linked-roles-access-to-cmks)
+ [EC2 Fleet 사용자의 권한](#ec2-fleet-iam-users)

## 시작 템플릿
<a name="ec2-fleet-prerequisites-launch-template"></a>

시작 템플릿은 인스턴스 유형과 가용 영역 등 시작할 인스턴스에 대한 구성 정보를 지정합니다. 시작 템플릿에 대한 자세한 내용은 [Amazon EC2 시작 템플릿에 인스턴스 시작 파라미터 저장](ec2-launch-templates.md)의 내용을 참조하세요.

## EC2 Fleet의 서비스 연결 역할
<a name="ec2-fleet-service-linked-role"></a>

`AWSServiceRoleForEC2Fleet` 역할은 EC2 Fleet에 사용자 대신 인스턴스를 요청, 시작, 종료 및 태깅할 수 있는 권한을 부여합니다. Amazon EC2는 이 서비스 연결 역할을 사용하여 다음 작업을 완료합니다.
+ `ec2:RunInstances` – 인스턴스를 시작합니다.
+ `ec2:RequestSpotInstances` – 스팟 인스턴스 요청.
+ `ec2:TerminateInstances` – 인스턴스를 종료합니다.
+ `ec2:DescribeImages` - 인스턴스에 대한 Amazon Machine Image(AMI) 설명
+ `ec2:DescribeInstanceStatus` - 인스턴스 상태 설명
+ `ec2:DescribeSubnets` - 인스턴스의 서브넷 설명
+ `ec2:CreateTags` – EC2 Fleet, 인스턴스 및 볼륨에 태그를 추가합니다.

AWS CLI 또는 API를 사용하여 EC2 Fleet을 생성하려면 먼저 이 역할이 있어야 합니다.

**참고**  
`instant` EC2 Fleet에는 이 역할이 필요하지 않습니다.

역할을 생성하려면 다음과 같이 IAM 콘솔을 사용하세요.

**EC2 Fleet에 대한 AWSServiceRoleForEC2Fleet 역할 생성**

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

1. 탐색 창에서 **역할**을 선택합니다.

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

1. **신뢰할 수 있는 엔터티 선택** 페이지에서 다음을 수행합니다.

   1. **신뢰할 수 있는 엔터티 유형**에서 **AWS 서비스**를 선택합니다.

   1. **사용 사례**에서 **서비스 또는 사용 사례**로 **EC2 - 플릿**을 선택합니다.
**작은 정보**  
**EC2 - 플릿**을 선택해야 합니다. **EC2**를 선택하면 **EC2 - 플릿** 사용 사례가 **사용 사례** 목록에 나타나지 않습니다. **EC2 - 플릿** 사용 사례는 필요한 IAM 권한으로 정책을 자동으로 생성하고 **AWSServiceRoleForEC2Fleet**을 역할 이름으로 제안합니다.

   1. **다음**을 선택합니다.

1. **권한 추가** 페이지에서 **다음**을 선택합니다.

1. **이름 지정, 검토 및 생성** 페이지에서 **역할 생성**을 선택합니다.

EC2 Fleet이 더 이상 필요 없으면 **AWSServiceRoleForEC2Fleet** 역할을 삭제하는 것이 좋습니다. 계정에서 이 역할을 삭제한 후 다른 플릿을 생성하면 다시 역할을 만들 수 있습니다.

자세한 내용은 IAM 사용 설명서**의 [서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create-service-linked-role.html)을 참조하세요.

## 암호화된 AMI 및 EBS 스냅샷에 사용할 고객 관리형 키에 대한 액세스 권한 부여
<a name="ec2-fleet-service-linked-roles-access-to-cmks"></a>

EC2 Fleet에 [암호화된 AMI](AMIEncryption.md) 또는 암호화된 Amazon EBS 스냅샷을 지정하고 암호화에 AWS KMS 키를 사용하는 경우 Amazon EC2에서 자동으로 인스턴스를 시작하려면 고객 관리형 키를 사용할 권한을 **AWSServiceRoleForEC2Fleet** 역할에 부여해야 합니다. 이렇게 하려면 다음 절차에 표시된 바와 같이 고객 관리형 키에 대한 권한 부여를 추가해야 합니다.

권한을 제공할 때 권한 부여는 키 정책을 대체합니다. 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [권한 부여 사용](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html) 및 [AWS KMS의 키 정책 사용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)을 참조하세요.

**AWSServiceRoleForEC2Fleet 역할에 고객 관리형 키를 사용할 수 있는 권한을 부여하려면**
+ [create-grant](https://docs.aws.amazon.com/cli/latest/reference/kms/create-grant.html) 명령을 사용하여 고객 관리형 키에 대한 권한 부여를 추가하고 허용된 작업을 수행할 수 있는 권한이 부여된 보안 주체(**AWSServiceRoleForEC2Fleet** 서비스 연결 역할)를 지정합니다. 고객 관리형 키는 `key-id` 파라미터와 고객 관리형 키의 ARN으로 지정됩니다. 보안 주체는 **AWSServiceRoleForEC2Fleet** 서비스 연결 역할의 `grantee-principal` 파라미터 및 ARN에 의해 지정됩니다.

  ```
  aws kms create-grant \
      --region us-east-1 \
      --key-id arn:aws:kms:us-east-1:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab \
      --grantee-principal arn:aws:iam::111122223333:role/AWSServiceRoleForEC2Fleet \
      --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"
  ```

## EC2 Fleet 사용자의 권한
<a name="ec2-fleet-iam-users"></a>

EC2 Fleet을 생성하거나 관리하는 사용자에게 필요한 권한을 부여해야 합니다.

**EC2 Fleet에 대한 정책 생성**

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

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

1. [**Create policy**]를 선택합니다.

1. **정책 생성** 페이지에서 **JSON** 탭을 선택한 다음, 텍스트를 다음과 같이 바꾸고 **정책 검토**를 선택합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:*"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                 "iam:ListRoles",
                 "iam:PassRole",
                 "iam:ListInstanceProfiles"
               ],
               "Resource":"arn:aws:iam::123456789012:role/DevTeam*"
           }
       ]
   }
   ```

------

   `ec2:*`는 모든 Amazon EC2 API 작업을 호출할 수 있는 사용자 권한을 부여합니다. 사용자를 특정 Amazon EC2 API 작업으로 제한하려면 해당 작업을 대신 지정하세요.

   사용자에는 기존 IAM 역할을 열거하는 `iam:ListRoles` 작업, EC2 Fleet 역할을 지정하는 `iam:PassRole` 작업 및 기존 인스턴스 프로파일을 열거하는 `iam:ListInstanceProfiles` 작업을 호출할 수 있는 권한이 있어야 합니다.

   (선택 사항) 사용자가 IAM 콘솔을 사용하여 역할 또는 인스턴스 프로파일을 생성할 수 있도록 하려면 정책에 다음 작업도 추가해야 합니다.
   + `iam:AddRoleToInstanceProfile`
   + `iam:AttachRolePolicy`
   + `iam:CreateInstanceProfile`
   + `iam:CreateRole`
   + `iam:GetRole`
   + `iam:ListPolicies`

1. **정책 검토** 페이지에 정책 이름과 설명을 입력한 다음 **정책 생성**을 선택합니다.

1. 액세스 권한을 제공하려면 사용자, 그룹 또는 역할에 권한을 추가하세요.
   + AWS IAM Identity Center의 사용자 및 그룹:

     권한 세트를 생성합니다. *AWS IAM Identity Center 사용자 안내서*에서 [권한 세트 생성](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)의 지침을 따릅니다.
   + ID 제공업체를 통해 IAM에서 관리되는 사용자:

     ID 페더레이션을 위한 역할을 생성합니다. *IAM 사용자 설명서*의 [Create a role for a third-party identity provider (federation)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)의 지침을 따릅니다.
   + IAM 사용자:
     + 사용자가 맡을 수 있는 역할을 생성합니다. *IAM 사용자 설명서*에서 [Create a role for an IAM user](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)의 지침을 따릅니다.
     + (권장되지 않음) 정책을 사용자에게 직접 연결하거나 사용자를 사용자 그룹에 추가합니다. *IAM 사용 설명서*에서 [사용자(콘솔)에 권한 추가](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)의 지침을 따릅니다.