

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

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

# EKS 기능에 대한 보안 고려 사항
<a name="capabilities-security"></a>

이 주제에서는 IAM 역할 구성, Kubernetes 권한, 다중 클러스터 배포 및 교차 계정 AWS 리소스 관리를 위한 아키텍처 패턴을 포함하여 EKS 기능에 대한 중요한 보안 고려 사항을 다룹니다.

EKS 기능은 IAM 역할, EKS 액세스 항목 및 Kubernetes RBAC의 조합을 사용하여 AWS 서비스, 클러스터 내 Kubernetes 리소스 및 AWS CodeConnections, AWS Secrets Manager 및 기타 AWS 서비스와의 통합에 대한 보안 액세스를 제공합니다.

## 기능 IAM 역할
<a name="_capability_iam_role"></a>

기능을 생성할 때 사용자는 EKS가 사용자를 대신하여 작업을 수행하는 데 사용하는 IAM 기능 역할을 제공합니다. 이 역할은 다음 조건을 충족해야 합니다.
+ 클러스터 및 기능 리소스와 동일한 AWS 계정에 있어야 함
+ `capabilities.eks.amazonaws.com` 서비스 위탁자가 역할을 수임하도록 허용하는 신뢰 정책이 있음
+ 요구 사항에 따라 기능 유형 및 사용 사례에 적합한 IAM 권한이 있어야 합니다. 필요한 각 권한에 대한 자세한 내용은 [AWS CodeConnections를 사용하여 Git 리포지토리에 연결](integration-codeconnections.md), [AWS Secrets Manager를 사용하여 애플리케이션 보안 암호 관리](integration-secrets-manager.md), [ACK 권한 구성](ack-permissions.md) 섹션을 참조하세요.

특정 사용 사례에 필요한 권한 범위를 고려하고 요구 사항을 충족하는 데 필요한 권한만 부여하는 것이 모범 사례입니다. 예를 들어 Kube Resource Orchestrator의 EKS 기능을 사용하는 경우 IAM 권한이 필요하지 않을 수 있지만 AWS Controllers for Kubernetes의 EKS 기능을 사용하는 경우 하나 이상의 AWS 서비스에 대한 전체 액세스 권한을 부여할 수 있습니다.

**중요**  
일부 사용 사례에서는 광범위한 관리 권한을 사용해야 할 수 있지만 특정 사용 사례에 필요한 최소 IAM 권한만 부여하여 최소 권한 원칙을 따름으로써 와일드카드 권한을 사용하는 대신 ARN 및 조건 키를 사용하여 특정 리소스에 대한 액세스를 제한합니다.

기능 IAM 역할 생성 및 구성에 대한 자세한 내용은 [Amazon EKS 기능 IAM 역할](capability-role.md) 섹션을 참조하세요.

## EKS 액세스 항목
<a name="_eks_access_entries"></a>

IAM 역할로 기능을 생성하면 Amazon EKS는 클러스터에서 해당 역할에 대한 액세스 항목을 자동으로 생성합니다. 이 액세스 항목이 작동하려면 기능에 기준 Kubernetes 권한을 부여합니다.

**참고**  
액세스 항목은 기능이 생성되는 클러스터에 대해 생성됩니다. Argo CD를 원격 클러스터에 배포하려면 Argo CD 기능이 애플리케이션을 배포 및 관리하기 위한 적절한 권한이 있는 액세스 항목을 해당 클러스터에서 생성해야 합니다.

액세스 항목에는 다음이 포함됩니다.
+ 위탁자에 해당하는 IAM 역할 ARN
+ 기준 Kubernetes 권한을 부여하는 기능별 액세스 항목 정책
+ 기능 유형에 따라 적절한 범위(클러스터 전체 또는 네임스페이스 범위)

**참고**  
Argo CD의 경우 네임스페이스 범위 권한이 기능 구성에 지정된 네임스페이스(기본값: `argocd`)에 부여됩니다.

 **기능별 기본 액세스 항목 정책** 

각 기능 유형은 다음과 같이 여러 기본 액세스 항목 정책을 설정하여 기능 역할에 필요한 권한을 부여합니다.

 **kro**   
+  `arn:aws:eks::aws:cluster-access-policy/AmazonEKSKROPolicy`(클러스터 범위)

  ResourceGraphDefinitions를 감시 및 관리하고 RGD에서 정의한 사용자 지정 리소스의 인스턴스를 생성할 권한을 부여합니다.

 **ACK**   
+  `arn:aws:eks::aws:cluster-access-policy/AmazonEKSACKPolicy`(클러스터 범위)

  모든 네임스페이스에서 ACK 사용자 지정 리소스에 대한 생성, 읽기, 업데이트 및 삭제를 수행할 권한을 부여합니다.

 **Argo CD**   
+  `arn:aws:eks::aws:cluster-access-policy/AmazonEKSArgoCDClusterPolicy`(클러스터 범위)

  Argo CD가 리소스를 검색하고 클러스터 범위의 객체를 관리하기 위한 사용할 클러스터 수준 권한을 부여합니다.
+  `arn:aws:eks::aws:cluster-access-policy/AmazonEKSArgoCDPolicy`(네임스페이스 범위)

  Argo CD가 애플리케이션을 배포 및 관리하기 위한 네임스페이스 수준 권한을 부여합니다. 기능 구성에 지정된 네임스페이스(기본값: `argocd`)로 범위가 지정됩니다.

자세한 내용은 [액세스 정책 권한 검토](access-policy-permissions.md) 섹션을 참조하세요.

## 추가 Kubernetes 권한
<a name="additional-kubernetes-permissions"></a>

일부 기능에는 기본 액세스 항목 정책 이외에 추가 Kubernetes 권한이 필요할 수 있습니다. 다음 중 하나를 사용하여 이러한 권한을 부여할 수 있습니다.
+  **액세스 항목 정책**: 액세스 항목에 추가 관리형 정책 연결
+  **Kubernetes RBAC**: 기능의 Kubernetes 사용자를 위해 `Role` 또는 `ClusterRole` 바인딩 생성

 **ACK 보안 암호 리더 권한** 

일부 ACK 컨트롤러는 데이터베이스 암호와 같은 민감한 데이터를 검색하기 위해 Kubernetes 보안 암호를 읽어야 합니다. 다음 ACK 컨트롤러에는 보안 암호 읽기 액세스 권한이 필요합니다.
+  `acm`, `acmpca`, `documentdb`, `memorydb`, `mq`, `rds`, `secretsmanager` 

보안 암호 읽기 권한을 부여하는 방법:

1. `arn:aws:eks::aws:cluster-access-policy/AmazonEKSSecretReaderPolicy` 액세스 항목 정책을 기능의 액세스 항목에 연결

1. ACK 리소스가 보안 암호를 참조하거나 클러스터 전체 액세스 권한을 부여하는 특정 네임스페이스로 정책 범위 지정

**중요**  
보안 암호 읽기 권한은 액세스 항목 정책을 연결할 때 지정한 네임스페이스로 범위가 지정됩니다. 이를 통해 기능이 액세스할 수 있는 보안 암호를 제한할 수 있습니다.

<a name="kro-resource-permissions"></a> **kro의 임의 리소스 권한** 

kro에는 ResourceGraphDefinitions에 정의된 리소스를 생성 및 관리할 권한이 필요합니다. 기본적으로 kro는 RGD 자체만 감시하고 관리할 수 있습니다.

kro에 리소스를 생성할 권한을 부여하는 방법:

 **옵션 1: 액세스 항목 정책** 

`AmazonEKSAdminPolicy` 또는 `AmazonEKSEditPolicy`와 같은 사전 정의된 액세스 항목 정책을 기능의 액세스 항목에 연결합니다.

 **옵션 2: Kubernetes RBAC** 

기능의 Kubernetes 사용자에게 필요한 권한을 부여하는 `ClusterRoleBinding`을 생성합니다.

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kro-cluster-admin
subjects:
- kind: User
  name: arn:aws:sts::111122223333:assumed-role/my-kro-role/KRO
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
```

**참고**  
kro의 Kubernetes 사용자 이름은 `arn:aws:sts::ACCOUNT_ID:assumed-role/ROLE_NAME/KRO` 패턴을 따릅니다.  
세션 이름 `/KRO`(대문자)는 EKS kro 기능에 의해 자동으로 설정됩니다.

## 기능에 필요한 IAM 권한
<a name="_iam_permissions_required_by_capability"></a>

 **Kube Resource Orchestrator(kro)**   
필요한 IAM 권한이 없습니다. 연결된 정책 없이 기능 역할을 생성할 수 있습니다. kro에는 Kubernetes RBAC 권한만 필요합니다.

 **AWS Controllers for Kubernetes(ACK)**   
ACK가 생성 및 관리할 AWS 리소스를 관리할 권한이 필요합니다. 요구 사항에 따라 특정 서비스, 작업 및 리소스에 대한 권한 범위를 지정해야 합니다. IAM 역할 선택기를 사용하는 프로덕션 모범 사례를 포함하여 ACK 권한 구성에 대한 자세한 내용은 [ACK 권한 구성](ack-permissions.md) 섹션을 참조하세요.

 **Argo CD**   
기본적으로 IAM 권한은 필요하지 않습니다. 다음과 같은 경우에 선택적 권한이 필요할 수 있습니다.  
+  AWS Secrets Manager: Secrets Manager에 Git 리포지토리 자격 증명을 저장하는 경우
+  AWS CodeConnections: Git 리포지토리 인증에 CodeConnections를 사용하는 경우
+ Amazon ECR: Amazon ECR에서 OCI 형식으로 저장된 헬름 차트를 사용하는 경우

## 보안 모범 사례
<a name="_security_best_practices"></a>

### IAM 최소 권한
<a name="_iam_least_privilege"></a>

기능 리소스에 사용 사례에 필요한 권한만 부여합니다. 필요한 경우 기능에 광범위한 관리 권한을 부여할 수 없음을 의미하지는 않습니다. 이러한 경우 해당 리소스에 대한 액세스를 적절하게 규제해야 합니다.

 **기능 역할**:
+  **ACK**: 가능하면 사용 사례 및 요구 사항에 따라 팀에 필요한 특정 AWS 서비스 및 리소스로 IAM 권한을 제한합니다.
+  **Argo CD**: 특정 Git 리포지토리 및 Kubernetes 네임스페이스에 대한 액세스 제한
+  **kro**: 신뢰 정책에 대한 기능 역할이 필요하지만 IAM 권한은 필요하지 않음(클러스터 RBAC만 사용)

 **예제**: `"Resource": "*"` 대신 특정 리소스 또는 리소스 그룹에 대한 패턴을 지정합니다.

```
"Resource": [
  "arn:aws:s3:::my-app-*",
  "arn:aws:rds:us-west-2:111122223333:db:prod-*"
]
```

IAM 조건 키를 사용하여 액세스를 추가로 제한합니다.

```
"Condition": {
  "StringEquals": {
    "aws:ResourceTag/Environment": "production"
  }
}
```

추가 IAM 구성 정보는 각 기능의 고려 사항 섹션을 참조하세요.

### Argo CD 보안 암호에 대한 네임스페이스 격리
<a name="_namespace_isolation_for_argo_cd_secrets"></a>

관리형 Argo CD 기능은 구성된 네임스페이스(기본값: `argocd`) 내 모든 Kubernetes 보안 암호에 액세스할 수 있습니다. 최적의 보안 태세를 유지 관리하려면 다음 네임스페이스 격리 사례를 따릅니다.
+ Argo CD 네임스페이스 내 Argo CD 관련 보안 암호만 유지
+ 관련되지 않은 애플리케이션 보안 암호를 Argo CD와 동일한 네임스페이스에 저장하지 않음
+ Argo CD 작업에 필요하지 않은 애플리케이션 보안 암호에 별도의 네임스페이스 사용

이 격리를 통해 Argo CD의 보안 암호 액세스는 Git 리포지토리 인증 및 기타 Argo CD 관련 작업에 필요한 자격 증명으로만 제한됩니다.

### Kubernetes RBAC
<a name="_kubernetes_rbac"></a>

기능 리소스를 생성 및 관리할 수 있는 사용자 및 서비스 계정을 제어합니다. 적절한 RBAC 정책을 사용하여 전용 네임스페이스에 기능 리소스를 배포하는 것이 모범 사례입니다.

예제: ACK에서 작업할 RBAC 역할. 이를 통해 `app-team` 네임스페이스에서 S3 버킷 리소스를 관리할 수 있습니다.

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: ack-s3-manager
  namespace: app-team
rules:
- apiGroups: ["s3.services.k8s.aws"]
  resources: ["buckets"]
  verbs: ["get", "list", "create", "update", "delete"]
```

### 감사 로깅
<a name="_audit_logging"></a>

 **CloudTrail**: 모든 EKS 기능 API 작업(생성, 업데이트, 삭제)이 AWS CloudTrail에 기록됩니다.

다음을 추적하도록 CloudTrail 로깅을 활성화합니다.
+ 기능을 생성하거나 수정한 사람
+ 기능 구성이 변경된 시점
+ 사용 중인 기능 역할

### 네트워크 액세스 및 VPC 엔드포인트
<a name="_network_access_and_vpc_endpoints"></a>

#### 프라이빗 Argo CD API 액세스
<a name="_private_argo_cd_api_access"></a>

하나 이상의 VPC 엔드포인트를 호스팅된 Argo CD 엔드포인트에 연결하여 Argo CD API 서버에 대한 액세스를 제한할 수 있습니다. 그러면 퍼블릭 인터넷을 통과하지 않고도 VPC 내에서 프라이빗으로 연결할 수 있습니다. VPC 엔드포인트는 Argo CD 웹 UI 및 Argo CD API(CLI 액세스 포함) 모두에 대한 액세스를 제공합니다.

**참고**  
호스팅된 Argo CD API 엔드포인트(eks-capabilities.*region*.amazonaws.com 사용)에 연결된 VPC 엔드포인트는 VPC 엔드포인트 정책을 지원하지 않습니다.

#### 프라이빗 클러스터에 배포
<a name="_deploying_to_private_clusters"></a>

Argo CD 기능은 애플리케이션을 완전한 프라이빗 EKS 클러스터에 배포하여 VPC 피어링 또는 복잡한 네트워킹 구성에 대한 필요성을 없앰으로써 운영상 상당한 이점을 제공합니다. 그러나 이 아키텍처를 설계하는 경우 Argo CD가 Git 리포지토리(퍼블릭일 수 있음)에서 구성을 가져와 프라이빗 클러스터에 적용하는지 고려합니다.

다음을 확인합니다.
+ 민감한 워크로드에 대해 프라이빗 Git 리포지토리 사용
+ 적절한 Git 리포지토리 액세스 제어 및 인증 구현
+ 병합하기 전에 풀 요청을 통해 변경 사항 검토 및 승인
+ 배포가 발생할 수 있는 시점을 제어하기 위해 Argo CD의 동기화 기간 사용 고려
+ 권한 없는 구성 변경 사항에 대한 Argo CD 감사 로그 모니터링

### 규정 준수
<a name="_compliance"></a>

EKS 기능은 완전관리형이며 Amazon EKS의 규정 준수 인증을 받았습니다.

최신 규정 준수 정보는 [AWS Services in Scope by Compliance Program](https://aws.amazon.com/compliance/services-in-scope/)을 참조하세요.

## 다음 단계
<a name="_next_steps"></a>
+  [ACK 권한 구성](ack-permissions.md) - ACK에 대한 IAM 권한 구성
+  [kro 권한 구성](kro-permissions.md) - kro에 대한 Kubernetes RBAC 구성
+  [Argo CD 권한 구성](argocd-permissions.md) - Argo CD에 대한 Identity Center 통합 구성
+  [EKS 기능 문제 해결](capabilities-troubleshooting.md) - 보안 및 권한 문제 해결