

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# AWS CLI를 사용하여 kro 기능 생성
<a name="kro-create-cli"></a>

이 주제에서는 AWS CLI를 사용하여 Kube Resource Orchestrator(kro) 기능을 생성하는 방법을 설명합니다.

## 사전 조건
<a name="_prerequisites"></a>
+  **AWS CLI** – 버전 `2.12.3` 이상. 버전을 확인하려면 `aws --version`을 실행합니다. 자세한 내용은 AWS 명령줄 인터페이스 사용 설명서에서 [설치하기](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)를 참조하세요.
+  **`kubectl`** - Kubernetes 클러스터 작업을 위한 명령줄 도구. 자세한 내용은 [`kubectl` 및 `eksctl` 설정](install-kubectl.md) 섹션을 참조하세요.

## 1단계: IAM 기능 역할 생성
<a name="_step_1_create_an_iam_capability_role"></a>

신뢰 정책 파일을 생성합니다.

```
cat > kro-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

IAM 역할을 생성합니다.

```
aws iam create-role \
  --role-name KROCapabilityRole \
  --assume-role-policy-document file://kro-trust-policy.json
```

**참고**  
ACK 및 Argo CD와 달리 kro에는 추가 IAM 권한이 필요하지 않습니다. kro는 전적으로 클러스터 내에서 작동하며 AWS API 직접 호출을 수행하지 않습니다. 역할은 EKS 기능 서비스와 신뢰 관계를 설정하는 데만 필요합니다.

## 2단계: kro 기능 생성
<a name="_step_2_create_the_kro_capability"></a>

클러스터에서 kro 기능 리소스를 생성합니다. *region-code*를 클러스터가 있는 AWS 리전(예: `us-west-2`)으로 바꾸고 *my-cluster*를 클러스터 이름으로 바꿉니다.

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --type KRO \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/KROCapabilityRole \
  --delete-propagation-policy RETAIN
```

명령은 즉시 반환되지만, EKS가 필요한 기능 인프라 및 구성 요소를 생성하므로 기능이 활성 상태가 되려면 다소 시간이 걸립니다. EKS는 생성될 때 클러스터에서 이 기능과 관련된 Kubernetes 사용자 지정 리소스 정의를 설치합니다.

**참고**  
클러스터가 존재하지 않는다는 오류가 발생하거나 권한이 없는 경우 다음을 확인합니다.  
클러스터 이름이 올바른지
AWS CLI가 올바른 리전에 구성되었는지
필요한 IAM 권한이 있음

## 3단계: 기능이 활성 상태인지 확인
<a name="_step_3_verify_the_capability_is_active"></a>

기능이 활성 상태가 될 때까지 기다립니다. *region-code*를 클러스터를 생성한 AWS 리전으로 바꾸고 *my-cluster*를 클러스터 이름으로 바꿉니다.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.status' \
  --output text
```

상태가 `ACTIVE`로 표시되면 기능이 준비된 것입니다.

전체 기능 세부 정보를 볼 수도 있습니다.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro
```

## 4단계: Kubernetes 리소스를 관리할 권한 부여
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

kro 기능을 생성하는 경우 `AmazonEKSKROPolicy`를 사용하여 EKS 액세스 항목이 자동으로 생성되며, 이를 통해 kro에서 ResourceGraphDefinitions 및 해당 인스턴스를 관리할 수 있습니다. 그러나 ResourceGraphDefinitions에 정의된 기본 Kubernetes 리소스(예: 배포, 서비스, ConfigMaps 등)를 생성하기 위한 권한은 기본적으로 부여되지 않습니다.

이 의도적인 설계는 최소 권한 원칙을 따르며, ResourceGraphDefinitions마다 필요한 권한이 다릅니다. 예: \$1 ConfigMaps 및 Secrets만 생성하는 ResourceGraphDefinition에는 배포 및 서비스를 생성하는 권한과 다른 권한이 필요함 \$1 ACK 리소스를 생성하는 ResourceGraphDefinition에는 해당 특정 사용자 지정 리소스에 대한 권한이 필요함 \$1 일부 ResourceGraphDefinitions는 새 리소스를 생성하지 않고 기존 리소스만 읽을 수 있음

ResourceGraphDefinitions에서 관리할 리소스에 따라 kro에 필요한 권한을 명시적으로 구성해야 합니다.

### 빠른 설정
<a name="_quick_setup"></a>

빠르게 시작하는 경우와 테스트 또는 개발 환경에서는 `AmazonEKSClusterAdminPolicy`를 사용합니다.

기능 역할 ARN을 가져옵니다.

```
CAPABILITY_ROLE_ARN=$(aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.roleArn' \
  --output text)
```

클러스터 관리 정책을 연결합니다.

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn $CAPABILITY_ROLE_ARN \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**중요**  
`AmazonEKSClusterAdminPolicy`는 모든 네임스페이스에서 모든 리소스 유형을 생성하는 기능을 포함하여 모든 Kubernetes 리소스를 생성 및 관리하는 광범위한 권한을 부여합니다. 이는 개발 및 POC에 편리하지만 프로덕션에서 사용해서는 안 됩니다. 프로덕션의 경우 ResourceGraphDefinitions에서 관리할 특정 리소스에 필요한 권한만 부여하는 사용자 지정 RBAC 정책을 생성합니다. 최소 권한 구성에 대한 지침은 [kro 권한 구성](kro-permissions.md) 및 [EKS 기능에 대한 보안 고려 사항](capabilities-security.md) 섹션을 참조하세요.

## 5단계: 사용자 지정 리소스를 사용할 수 있는지 확인
<a name="_step_5_verify_custom_resources_are_available"></a>

기능이 활성 상태가 되면 클러스터에서 kro 사용자 지정 리소스를 사용할 수 있는지 확인합니다.

```
kubectl api-resources | grep kro.run
```

`ResourceGraphDefinition` 리소스 유형이 나열됩니다.

## 다음 단계
<a name="_next_steps"></a>
+  [kro 개념](kro-concepts.md) - kro 개념 및 리소스 구성 이해
+  [kro 개념](kro-concepts.md) - SimpleSchema, CEL 표현식 및 구성 패턴에 대해 알아보기
+  [기능 리소스 작업](working-with-capabilities.md) - kro 기능 리소스 관리