

• AWS Systems Manager CloudWatch 대시보드는 2026년 4월 30일 이후에는 더 이상 사용할 수 없습니다. 고객은 Amazon CloudWatch 콘솔을 계속 사용하여 현재와 마찬가지로 Amazon CloudWatch 대시보드를 보고, 생성하고, 관리할 수 있습니다. 자세한 내용은 [Amazon CloudWatch 대시보드 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)를 참조하세요.

# Amazon Elastic Kubernetes Service에서 Parameter Store 파라미터 사용
<a name="integrate_eks"></a>

AWS Systems Manager의 도구인 Parameter Store에서 Amazon EKS 포드에 탑재된 파일로 파라미터를 표시하려면 Kubernetes Secrets Store CSI 드라이버에 대해 AWS Secrets and Configuration Provider를 사용할 수 있습니다. ASCP는 Amazon EC2 노드 그룹을 실행하는 Amazon Elastic Kubernetes Service 1.17 이상에서 작동합니다. AWS Fargate 노드 그룹은 지원되지 않습니다.

ASCP를 사용하면 Parameter Store 파라미터를 저장 및 관리한 후 Amazon EKS에서 실행되는 워크로드를 통해 해당 검색할 수 있습니다. 파라미터에 JSON 형식의 여러 키-값 쌍이 포함되어 있는 경우 Amazon EKS에서 탑재할 키-값 쌍을 선택할 수 있습니다. ASCP는 JMESPath 구문을 사용하여 보안 암호의 키-값 쌍을 쿼리할 수 있습니다. ASCP는 AWS Secrets Manager 보안 암호에서도 사용됩니다.

ASCP는 Amazon EKS를 사용한 두 가지 인증 방법을 제공합니다. 첫 번째 접근 방식은 IRSA(서비스 계정에 대한 IAM 역할)를 사용합니다. 두 번째 접근 방식은 Pod Identity를 사용합니다. 각 접근 방식에는 이점과 사용 사례가 있습니다.

## IRSA(서비스 계정에 대한 IAM 역할)를 사용하는 ASCP
<a name="csi_driver_overview"></a>

IRSA(서비스 계정에 대한 IAM 역할)를 사용하는 ASCP를 통해 Parameter Store의 파라미터를 Amazon EKS 포드의 파일로 탑재할 수 있습니다. 이 접근 방식이 적합한 경우:
+ 파라미터를 포드에 파일로 탑재해야 합니다.
+ Amazon EC2 노드 그룹에서 Amazon EKS 버전 1.17 이상을 사용하고 있습니다.
+ JSON 형식 파라미터에서 특정 키-값 쌍을 검색하려고 합니다.

자세한 내용은 [IRSA(서비스 계정에 대한 IAM 역할)에서 AWS Secrets and Configuration Provider CSI 사용](integrating_ascp_irsa.md) 섹션을 참조하세요.

## Pod Identity를 사용하는 ASCP
<a name="pod_identity_overview"></a>

Pod Identity를 사용하는 ASCP 방법은 보안을 강화하고 Parameter Store의 파라미터 액세스 구성을 간소화합니다. 이 접근 방식이 유용한 경우:
+ 포드 수준에서 더 세분화된 권한 관리가 필요합니다.
+ Amazon EKS 버전 1.24 이상을 사용하고 있습니다.
+ 성능 및 확장성 개선을 원합니다.

자세한 내용은 [Pod Identity for Amazon EKS에서 AWS Secrets and Configuration Provider CSI 사용](ascp-pod-identity-integration.md) 섹션을 참조하세요.

## 올바른 접근 방식 선택
<a name="comparison"></a>

IRSA를 사용하는 ASCP와 Pod Identity를 사용하는 ASCP 중에서 결정할 때 고려할 요소:
+ Amazon EKS 버전: Pod Identity의 경우 Amazon EKS 1.24 이상이 필요한 반면 CSI 드라이버는 Amazon EKS 1.17 이상을 사용합니다.
+ 보안 요구 사항: Pod Identity는 포드 수준에서 더 세분화된 제어가 가능합니다.
+ 성능: Pod Identity는 일반적으로 대규모 환경에서 더 나은 성능을 발휘합니다.
+ 복잡성: Pod Identity는 별도의 서비스 계정이 필요하지 않아 설정이 간소화됩니다.

특정 요구 사항 및 Amazon EKS 환경에 가장 적합한 방법을 선택합니다.

# ASCP for Amazon EKS 설치
<a name="ascp-eks-installation"></a>

이 섹션에서는 AWS Secrets and Configuration Provider for Amazon EKS 설치 방법을 설명합니다. ASCP를 사용하여 Parameter Store의 파라미터와 AWS Secrets Manager의 보안 암호를 Amazon EKS 포드에 파일로 탑재할 수 있습니다.

## 사전 조건
<a name="prerequisites"></a>
+ Amazon EKS 클러스터
  + Pod Identity 버전 1.24 이상
  + IRSA 버전 1.17 이상
+ AWS CLI 설치 및 구성
+ Amazon EKS 클러스터에 kubectl 설치 및 구성
+ Helm(버전 3.0 이상)

## ASCP 설치 및 구성
<a name="integrating_csi_driver_install"></a>

ASCP는 [secrets-store-csi-provider-aws](https://github.com/aws/secrets-store-csi-driver-provider-aws) 리포지토리의 GitHub에서 제공됩니다. 리포지토리에는 `objectType` 값을 `secretsmanager`에서 `ssmparameter`로 변경하여 보안 암호를 생성 및 탑재하기 위한 예제 YAML 파일도 포함되어 있습니다.

설치 과정에서, FIPS 엔드포인트를 사용하도록 ASCP를 구성할 수 있습니다. Systems Manager 엔드포인트 목록은 *Amazon Web Services 일반 참조*의 [Systems Manager 서비스 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region)를 참조하세요.

**Helm을 사용하여 ASCP를 설치하는 방법**

1. 리포지토리가 최신 차트를 가리키고 있는지 확인하려면 `helm repo update.`를 사용합니다.

1. Secrets Store CSI Driver 차트를 추가합니다.

   ```
   helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
   ```

1. 차트를 설치합니다. 스로틀링을 구성하려면 다음 플래그를 추가합니다. `--set-json 'k8sThrottlingParams={"qps": "number of queries per second", "burst": "number of queries per second"}'` 

   ```
   helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
   ```

1. ASCP 차트를 추가합니다.

   ```
   helm repo add aws-secrets-manager https://aws.github.io/secrets-store-csi-driver-provider-aws
   ```

1. 차트를 설치합니다. FIPS 엔드포인트를 사용하려면 다음 플래그를 추가합니다. `--set useFipsEndpoint=true` 

   ```
   helm install -n kube-system secrets-provider-aws aws-secrets-manager/secrets-store-csi-driver-provider-aws
   ```

**리포지토리에서 YAML을 사용하여 설치하는 방법**
+ 다음 명령을 사용합니다.

  ```
  helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
  helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
  kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml
  ```

## 설치 확인
<a name="verify-ascp-installations"></a>

EKS 클러스터, Secrets Store CSI 드라이버 및 ASCP 플러그인의 설치를 확인하려면 다음 단계를 따릅니다.

1. EKS 클러스터 확인:

   ```
   eksctl get cluster --name clusterName
   ```

   이 명령을 사용하면 클러스터에 대한 정보가 반환되어야 합니다.

1. Secrets Store CSI 드라이버 설치를 확인합니다.

   ```
   kubectl get pods -n kube-system -l app=secrets-store-csi-driver
   ```

   `csi-secrets-store-secrets-store-csi-driver-xxx`와 같이 이름과 함께 실행 중인 포드가 표시될 것입니다.

1. ASCP 플러그인 설치 확인:

------
#### [ YAML installation ]

   ```
   $ kubectl get pods -n kube-system -l app=csi-secrets-store-provider-aws
   ```

   출력 예시:

   ```
   NAME                                     READY   STATUS    RESTARTS   AGE
   csi-secrets-store-provider-aws-12345      1/1     Running   0          2m
   ```

------
#### [ Helm installation ]

   ```
   $  kubectl get pods -n kube-system -l app=secrets-store-csi-driver-provider-aws
   ```

   출력 예시:

   ```
   NAME                                              READY   STATUS    RESTARTS   AGE
   secrets-provider-aws-secrets-store-csi-driver-provider-67890       1/1     Running   0          2m
   ```

------

   포드가 `Running` 상태로 표시될 것입니다.

명령을 실행한 후 모든 것이 올바르게 설정되면 오류 없이 실행 중인 모든 구성 요소가 표시됩니다. 문제가 발생하면 문제가 있는 특정 포드의 로그를 확인하여 문제를 해결해야 할 수 있습니다.

## 문제 해결
<a name="troubleshooting"></a>

1. 다음을 실행하여 ASCP 공급자의 로그 확인:

   ```
   kubectl logs -n kube-system -l app=csi-secrets-store-provider-aws
   ```

1. `kube-system` 네임스페이스에서 모든 포드의 상태를 확인합니다.

   *기본 자리 표시자 텍스트*를 자신의 포드 ID로 바꿉니다.

   ```
   kubectl -n kube-system get pods
   ```

   ```
   kubectl -n kube-system logs pod/pod-id
   ```

   CSI 드라이버 및 ASCP와 관련된 모든 포드는 'Running' 상태여야 합니다.

1. CSI 드라이버 버전 확인:

   ```
   kubectl get csidriver secrets-store.csi.k8s.io -o yaml
   ```

   이 명령을 사용하면 설치된 CSI 드라이버에 대한 정보가 반환되어야 합니다.

## 추가 리소스
<a name="additional-resources"></a>

Amazon EKS에서 ASCP 사용에 대한 자세한 내용은 다음 리소스를 참조하세요.
+ [Amazon EKS에서 Pod Identity 사용](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)
+ [GitHub의 AWS Secrets Store CSI 드라이버](https://github.com/aws/secrets-store-csi-driver-provider-aws)

# Pod Identity for Amazon EKS에서 AWS Secrets and Configuration Provider CSI 사용
<a name="ascp-pod-identity-integration"></a>

Pod Identity Agent for Amazon Elastic Kubernetes Service와 AWS Secrets and Configuration Provider의 통합으로 Amazon EKS에서 실행되는 애플리케이션에 대해 보안이 향상되고, 구성이 간소화되고, 성능이 개선됩니다. Pod Identity는 AWS Systems Manager Parameter Store에서 파라미터 또는 Secrets Manager에서 보안 암호를 검색할 때 Amazon EKS에 대한 AWS Identity and Access Management(IAM) 인증을 간소화합니다.

Amazon EKS Pod Identity는 Amazon EKS 인터페이스를 통해 직접 권한이 설정되도록 허용하여 Kubernetes 애플리케이션의 IAM 권한을 구성하는 프로세스를 간소화하며, 이를 통해 설정 단계 수가 감소하고 Amazon EKS와 IAM 서비스 간에 전환할 필요가 없습니다. Pod Identity를 사용하면 신뢰 정책을 업데이트하지 않고도 여러 클러스터에서 단일 IAM 역할을 사용할 수 있고, [역할 세션 태그](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-abac.html#pod-id-abac-tags)가 지원되어 더 세분화된 액세스 제어가 가능합니다. 이 접근 방식은 역할 간에 권한 정책을 재사용할 수 있도록 하여 정책 관리를 간소화할 뿐만 아니라 일치하는 태그를 기반으로 AWS 리소스에 대한 액세스를 활성화하면서 보안을 강화합니다.

## 작동 방식
<a name="how-it-works"></a>

1. Pod Identity는 포드에 IAM 역할을 할당합니다.

1. ASCP는 이 역할을 사용하여 AWS 서비스에 인증합니다.

1. 권한이 부여된 경우 ASCP는 요청된 파라미터를 검색하여 포드에서 사용할 수 있도록 합니다.

자세한 내용은 *Amazon EKS 사용 설명서*의 [Amazon EKS Pod Identity 작동 방식 이해](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-how-it-works.html)를 참조하세요.

## 사전 조건
<a name="prerequisites"></a>

**중요**  
Pod Identity는 클라우드의 Amazon EKS에서만 지원됩니다. [Amazon EKS Anywhere](https://aws.amazon.com/eks/eks-anywhere/), [Red Hat OpenShift Service on AWS](https://aws.amazon.com/rosa/), Amazon EC2 인스턴스의 자체 관리형 Kubernetes 클러스터에서는 지원되지 않습니다.
+ Amazon EKS 클러스터(버전 1.24 이상)
+ `kubectl`을 통해 AWS CLI 및 Amazon EKS 클러스터에 액세스
+ (선택 사항) 교차 계정 액세스를 위해 2개의 AWS 계정에 액세스

## Amazon EKS Pod Identity Agent 설치
<a name="install-pod-identity-agent"></a>

클러스터에서 Pod Identity를 사용하려면 Amazon EKS Pod Identity Agent 추가 기능을 설치해야 합니다.

**Pod Identity Agent 설치**
+ 클러스터에 Pod Identity Agent 추가 기능을 설치합니다.

  *기본 자리 표시자* 텍스트를 자신의 값으로 바꿉니다.

  ```
  eksctl create addon \
    --name eks-pod-identity-agent \
    --cluster clusterName \
    --region region
  ```

## Pod Identity를 사용하는 ASCP 설정
<a name="pod-identity-setup"></a>

1. 포드가 액세스해야 하는 파라미터에 `ssm:GetParameters` 및 `ssm:DescribeParameters` 권한을 부여하는 권한 정책을 생성합니다.

1. Pod Identity에 대한 Amazon EKS 서비스 보안 주체가 맡을 수 있는 IAM 역할 생성:

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

****  

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

------

   IAM 정책을 역할에 연결합니다.

   *기본 자리 표시자* 텍스트를 자신의 값으로 바꿉니다.

   ```
   aws iam attach-role-policy \
     --role-name MY_ROLE \
     --policy-arn POLICY_ARN
   ```

1. Pod Identity 연결을 생성합니다. 예시는 *Amazon EKS 사용 설명서*의 [Pod Identity 연결 생성](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html#pod-id-association-create)을 참조하세요.

1. 포드에 탑재할 파라미터 또는 보안 암호를 지정하는 `SecretProviderClass` 생성:

   ```
   kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleSecretProviderClass-PodIdentity.yaml
   ```

   IRSA와 Pod Identity 사이에서 `SecretProviderClass`의 주요 차이점은 선택적 파라미터 `usePodIdentity`입니다. 인증 접근 방식을 결정하는 선택적 필드입니다. 지정하지 않으면 기본적으로 IRSA(서비스 계정에 대한 IAM 역할)를 사용합니다.
   + EKS Pod Identity를 사용하려면 다음 값 중 하나를 사용합니다. `"true", "True", "TRUE", "t", "T"`.
   + IRSA를 명시적으로 사용하려면 값을 `"false", "False", "FALSE", "f", or "F"`로 설정합니다.

1. `/mnt/secrets-store`에 파라미터 또는 보안 암호를 탑재하는 포드 배포:

   ```
   kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleDeployment-PodIdentity.yaml
   ```

1. 프라이빗 Amazon EKS 클러스터를 사용하는 경우 클러스터가 있는 VPC에 AWS STS 엔드포인트가 있어야 합니다. 엔드포인트 생성에 대한 자세한 내용은 **AWS Identity and Access Management 사용 설명서의 [인터페이스 VPC 엔드포인트](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_interface_vpc_endpoints.html) 섹션을 참조하세요.

### 보안 암호 탑재 확인
<a name="verify-secret-mount"></a>

파라미터 또는 보안 암호가 제대로 탑재되었는지 확인하려면 다음 명령을 실행합니다.

*기본 자리 표시자* 텍스트를 자신의 값으로 바꿉니다.

```
kubectl exec -it $(kubectl get pods | awk '/pod-identity-deployment/{print $1}' | head -1) -- cat /mnt/secrets-store/MyParameter
```

**Parameter Store의 파라미터에 액세스하도록 Amazon EKS Pod Identity 설정:**

1. 포드가 액세스해야 하는 파라미터에 `ssm:GetParameters` 및 `ssm:DescribeParameters` 권한을 부여하는 권한 정책을 생성합니다.

1. 아직 없는 경우 Parameter Store에서 파라미터를 생성합니다. 자세한 내용은 [Systems Manager에서 Parameter Store 파라미터 생성](sysman-paramstore-su-create.md) 섹션을 참조하세요.

## 문제 해결
<a name="integrating_aspc_pod_trouble"></a>

포드 배포를 설명하여 대부분의 오류를 볼 수 있습니다.

**컨테이너에 대한 오류 메시지 확인**

1. 다음 명령을 사용하여 포드 이름 목록을 가져옵니다. 기본 네임스페이스를 사용하지 않는 경우에는 `-n namespace`를 사용합니다.

   ```
   kubectl get pods
   ```

1. 포드를 설명하기 위해 다음 명령에서 *pod-id*에 대해 이전 단계에서 찾은 포드의 포드 ID를 사용합니다. 기본 네임스페이스를 사용하지 않는 경우에는 `-n NAMESPACE`를 사용합니다.

   ```
   kubectl describe pod/pod-id
   ```

**ASCP에 대한 오류를 확인하려면**
+ 공급자 로그에서 자세한 정보를 찾으려면 다음 명령에서 *PODID*에 대해 *csi-secrets-store-provider-aws* 포드의 ID를 사용합니다.

  ```
  kubectl -n kube-system get pods
  kubectl -n kube-system logs pod/pod-id
  ```

# IRSA(서비스 계정에 대한 IAM 역할)에서 AWS Secrets and Configuration Provider CSI 사용
<a name="integrating_ascp_irsa"></a>

**Topics**
+ [사전 조건](#prerequisites)
+ [액세스 제어 설정](#integrating_ascp_irsa_access)
+ [탑재할 파라미터 식별](#integrating_ascp_irsa_mount)
+ [문제 해결](#integrating_ascp_irsa_trouble)

## 사전 조건
<a name="prerequisites"></a>
+ Amazon EKS 클러스터(버전 1.17 이상)
+ `kubectl`을 통해 AWS CLI 및 Amazon EKS 클러스터에 액세스

## 액세스 제어 설정
<a name="integrating_ascp_irsa_access"></a>

ASCP는 Amazon EKS Pod Identity를 검색하고 IAM 역할에 대한 자격 증명을 교환합니다. IAM 정책에서 해당 IAM 역할에 대한 권한을 설정합니다. ASCP가 IAM 역할을 가정할 경우, ASCP는 사용자가 권한을 부여한 파라미터에 대한 액세스 권한을 가져옵니다. 다른 컨테이너는 IAM 역할과 연결하지 않는 한 파라미터에 액세스할 수 없습니다.

**Parameter Store의 파라미터에 대한 Amazon EKS 포드의 액세스 권한 부여**

1. 포드가 액세스해야 하는 파라미터에 `ssm:GetParameters` 및 `ssm:DescribeParameters` 권한을 부여하는 권한 정책을 생성합니다.

1. 아직 없는 경우 클러스터에 대한 IAM OpenID Connect(OIDC) 공급자를 생성합니다. 자세한 내용은 **Amazon EKS 사용 설명서의 [Create an IAM OIDC provider for your cluster](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) 섹션을 참조하세요.

1. [서비스 계정용 IAM 역할](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)을 생성하고 정책을 연결합니다. 자세한 내용은 Amazon EKS 사용 설명서의 [Create an IAM role for a service account](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) 섹션을 참조하세요.**

1. 프라이빗 Amazon EKS 클러스터를 사용하는 경우 클러스터가 있는 VPC에 AWS STS 엔드포인트가 있어야 합니다. 엔드포인트 생성에 대한 자세한 내용은 **AWS Identity and Access Management 사용 설명서의 [인터페이스 VPC 엔드포인트](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_interface_vpc_endpoints.html) 섹션을 참조하세요.

## 탑재할 파라미터 식별
<a name="integrating_ascp_irsa_mount"></a>

ASCP가 Amazon EKS에 파일 시스템의 파일로 탑재하는 파라미터를 확인하려면 [SecretProviderClass](ascp-examples.md#ascp-examples-secretproviderclass) YAML 파일을 생성합니다. `SecretProviderClass`는 탑재할 파라미터와 이를 탑재할 파일 이름을 나열합니다. 이 `SecretProviderClass`는 참조하는 Amazon EKS 포드와 동일한 네임스페이스에 있어야 합니다.

### 파라미터를 파일로 탑재
<a name="mount-secrets"></a>

다음 지침에서는 YAML 파일 예제 [ExampleSecretProviderClass.yaml](https://github.com/aws/secrets-store-csi-driver-provider-aws/blob/main/examples/ExampleSecretProviderClass-IRSA.yaml) 및 [ExampleDeployment.yaml](https://github.com/aws/secrets-store-csi-driver-provider-aws/blob/main/examples/ExampleDeployment-IRSA.yaml)을 사용하여 파라미터를 파일로 탑재하는 방법을 보여줍니다.

**Amazon EKS에 파라미터 탑재**

1. 포드에 `SecretProviderClass` 적용:

   ```
   kubectl apply -f ExampleSecretProviderClass.yaml
   ```

1. 포드 배포:

   ```
   kubectl apply -f ExampleDeployment.yaml
   ```

1. ASCP가 파일을 탑재합니다.

## 문제 해결
<a name="integrating_ascp_irsa_trouble"></a>

포드 배포를 설명하여 대부분의 오류를 볼 수 있습니다.

**컨테이너에 대한 오류 메시지 확인**

1. 다음 명령을 사용하여 포드 이름 목록을 가져옵니다. 기본 네임스페이스를 사용하지 않는 경우에는 `-n name-space`를 사용합니다.

   ```
   kubectl get pods
   ```

1. 포드를 설명하기 위해 다음 명령에서 *pod-id*에 대해 이전 단계에서 찾은 포드의 포드 ID를 사용합니다. 기본 네임스페이스를 사용하지 않는 경우에는 `-n nameSpace`를 사용합니다.

   ```
   kubectl describe pod/pod-id
   ```

**ASCP에 대한 오류를 확인하려면**
+ 공급자 로그에서 자세한 정보를 찾으려면 다음 명령에서 *pod-id*에 대해 *csi-secrets-store-provider-aws* 포드의 ID를 사용합니다.

  ```
  kubectl -n kube-system get pods
  kubectl -n kube-system logs Pod/pod-id
  ```
+ 

**`SecretProviderClass` CRD 설치 여부 확인:**

  ```
  kubectl get crd secretproviderclasses.secrets-store.csi.x-k8s.io
  ```

  이 명령에서 `SecretProviderClass` 사용자 지정 리소스 정의에 관한 정보가 반환되어야 합니다.
+ 

**SecretProviderClass 객체가 생성되었는지 확인합니다.**

  ```
  kubectl get secretproviderclass SecretProviderClassName -o yaml
  ```

# AWS Secrets and Configuration Provider 코드 예제
<a name="ascp-examples"></a>

## ASCP 인증 및 액세스 제어 예제
<a name="ascp-auth-access-examples"></a>

### 예: Amazon EKS Pod Identity 서비스(pods.eks.amazonaws.com)가 역할을 수임하고 세션에 태그를 지정하도록 허용하는 IAM 정책:
<a name="ascp-auth-access-example-1"></a>

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

****  

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

------

## SecretProviderClass
<a name="ascp-examples-secretproviderclass"></a>

YAML을 사용하여 ASCP를 사용하는 Amazon EKS에 탑재할 파라미터를 설명합니다. 예시는 [SecretProviderClass 사용](#ascp-scenarios-secretproviderclass) 섹션을 참조하세요.

### SecretProviderClass YAML 구조
<a name="ascp-examples-secretproviderclass-1"></a>

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
   name: name
spec:
  provider: aws
  parameters:
    region:
    failoverRegion:
    pathTranslation:
    usePodIdentity:
    preferredAddressType:
    objects:
```

파라미터 필드에는 탑재 요청의 세부 정보 포함:

**리전**  
(선택 사항) 파라미터의 AWS 리전입니다. 이 필드를 사용하지 않는 경우 ASCP는 노드의 주석에서 리전을 조회합니다. 이 조회는 탑재 요청에 오버헤드를 추가하므로 많은 수의 포드를 사용하는 클러스터에 리전을 제공하는 것이 좋습니다.  
또한 `failoverRegion`을 지정하는 경우 ASCP는 두 리전 모두에서 보안 암호 검색을 시도합니다. 두 리전 중 하나가 예를 들어 인증 문제에 대해 `4xx` 오류를 반환하는 경우 ASCP는 어느 파라미터도 탑재하지 않습니다. `region```에서 파라미터가 성공적으로 검색되면 ASCP는 해당 파라미터 값을 탑재합니다. `region`에서는 파라미터가 성공적으로 검색되지 않고 `failoverRegion`에서 성공적으로 검색되는 경우 ASCP는 해당 파라미터 값을 탑재합니다.

**`failoverRegion`**  
(선택 사항) 이 필드를 포함하는 경우 ASCP는 `region` 및 이 필드에 정의된 리전에서 파라미터를 검색하려고 시도합니다. 두 리전 중 하나가 예를 들어 인증 문제에 대해 `4xx` 오류를 반환하는 경우 ASCP는 어느 파라미터도 탑재하지 않습니다. `region`에서 파라미터가 성공적으로 검색되면 ASCP는 해당 파라미터 값을 탑재합니다. `region`에서는 파라미터가 성공적으로 검색되지 않고 `failoverRegion`에서 성공적으로 검색되는 경우 ASCP는 해당 파라미터 값을 탑재합니다. 이 필드 사용 방법의 예는 [다중 리전 파라미터 장애 조치](#multi-region-failover) 섹션을 참조하세요.

**pathTranslation**  
(선택 사항) Amazon EKS의 파일 이름에 Linux의 슬래시(/)와 같은 경로 구분 문자가 포함된 경우 사용할 단일 대체 문자입니다. ASCP는 경로 구분 문자가 포함된 탑재 파일을 생성할 수 없습니다. 그 대신 ASCP는 경로 구분 문자를 다른 문자로 대체합니다. 이 필드를 사용하지 않는 경우 대체 문자는 밑줄(\$1)이므로 예를 들어 `My/Path/Parameter`은 `My_Path_Parameter`으로 탑재됩니다.  
문자 대체를 방지하려면 `False` 문자열을 입력합니다.

***usePodIdentity***  
(선택 사항) 인증 접근 방식을 결정합니다. 지정하지 않으면 기본적으로 IRSA(서비스 계정에 대한 IAM 역할)를 사용합니다.  
+ EKS Pod Identity를 사용하려면 다음 값 중 하나를 사용합니다. `"true"`", `"True"`, `"TRUE"`, `"t"` 또는 `"T"`.
+ IRSA를 명시적으로 사용하려면 다음 값 중 하나를 사용합니다. `"false"`, `"False"`, `"FALSE"`, `"f"` 또는 `"F"`"=.

***preferredAddressType***  
(선택 사항) Pod Identity Agent 엔드포인트 통신에 사용할 기본 설정 IP 주소 유형을 지정합니다. 필드는 EKS Pod Identity 기능을 사용할 때만 적용되고 서비스 계정에 IAM 역할을 사용할 때는 무시됩니다. 값은 대/소문자를 구분하지 않습니다. 유효값은 다음과 같습니다.  
+ `"ipv4"`, `"IPv4"`" 또는 `"IPV4"` - Pod Identity Agent IPv4 엔드포인트 강제 사용
+ `"ipv6"`, `"IPv6"` 또는 `"IPV6"` - Pod Identity Agent IPv6 엔드포인트 강제 사용
+ 지정되지 않음 - 자동 엔드포인트 선택 사용, IPv4 엔드포인트를 먼저 시도하고 IPv4 실패 시 IPv6 엔드포인트로 폴백

**객체**  
탑재할 보안 암호의 YAML 선언을 포함하는 문자열입니다. YAML 다중 행 문자열 또는 파이프(\$1) 문자를 사용하는 것이 좋습니다.    
**objectName**  
필수 사항입니다. 가져올 파라미터 또는 보안 암호의 이름을 지정합니다. Parameter Store의 경우 파라미터의 [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html#API_GetParameter_RequestParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html#API_GetParameter_RequestParameters)으로 파라미터의 이름 또는 전체 ARN일 수 있습니다. Secrets Manager의 경우 파라미터의 [https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html#API_GetSecretValue_RequestParameters](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html#API_GetSecretValue_RequestParameters)로 보안 암호의 친숙한 이름 또는 전체 ARN일 수 있습니다.  
**objectType**  
`objectName`으로 Secrets Manager ARN을 사용하지 않는 경우에 필요합니다. Parameter Store에는 `ssmparameter`을 사용합니다. Secrets Manager의 경우 `secretsmanager`를 사용합니다.  
**objectAlias**  
(선택 사항) Amazon EKS 포드에 있는 보안 암호의 파일 이름입니다. 이 필드를 지정하지 않은 경우 `objectName`이 파일 이름으로 나타납니다.  
**objectVersion**  
(선택 사항) 파라미터의 버전 ID입니다. 파라미터를 업데이트할 때마다 버전 ID를 업데이트해야 하므로 권장하지 않습니다. 기본적으로 가장 최신 버전이 사용됩니다. `failoverRegion`을(를) 포함하는 경우 이 필드는 기본 `objectVersion`을(를) 나타냅니다.  
**objectVersionLabel**  
(선택 사항) 버전의 별칭입니다. 기본값은 가장 최근 버전 `AWSCURRENT`입니다. `failoverRegion`을(를) 포함하는 경우 이 필드는 기본 `objectVersionLabel`을(를) 나타냅니다.  
**jmesPath**  
(선택 사항) Amazon EKS에 탑재할 파일에 대한 파라미터의 키 맵입니다. 이 필드를 사용하려면 파라미터 값이 JSON 형식이어야 합니다.  
다음 예제에서는 JSON 인코딩 파라미터의 형태를 보여줍니다.  

```
{
    "username" : "myusername",
    "password" : "mypassword"
}
```
키는 `username` 및 `password`입니다. `username`에 연결된 값은 `myusername`이며, `password`에 연결된 값은 `mypassword`입니다.  
이 필드를 사용하는 경우 `path` 및 `objectAlias` 하위 필드를 포함해야 합니다.    
**경로**  
파라미터 값의 JSON에 있는 키-값 쌍의 키입니다. 필드에 하이픈이 포함된 경우 작은 따옴표를 사용하여 하이픈을 이스케이프 처리합니다. 예: `path: '"hyphenated-path"'`  
**objectAlias**  
Amazon EKS 포드에 탑재할 파일 이름입니다. 필드에 하이픈이 포함된 경우 작은 따옴표를 사용하여 하이픈을 이스케이프 처리합니다. 예: `objectAlias: '"hyphenated-alias"'`  
**`failoverObject`**  
(선택 사항) 이 필드를 지정하는 경우 ASCP는 기본 `objectName`에 지정된 파라미터와 `failoverObject` `objectName` 하위 필드에 지정된 파라미터를 모두 검색하려고 시도합니다. 둘 중 하나에서 예를 들어 인증 문제에 대해 `4xx` 오류를 반환하는 경우 ASCP는 어느 파라미터도 탑재하지 않습니다. 기본 `objectName`에서 파라미터가 성공적으로 검색되면 ASCP는 해당 파라미터 값을 탑재합니다. 기본 `objectName`에서는 파라미터가 성공적으로 검색되지 않고 장애 조치 `objectName`에서 성공적으로 검색되는 경우 ASCP는 해당 파라미터 값을 탑재합니다. 이 필드를 포함하는 경우 필드 `objectAlias`도 포함해야 합니다. 이 필드 사용 방법의 예는 [다른 파라미터로 장애 조치](#failover-parameter) 섹션을 참조하세요.  
일반적으로 장애 조치 파라미터가 복제본이 아닌 경우 이 필드를 사용합니다. 복제본을 지정하는 방법에 대한 예는 [다중 리전 파라미터 장애 조치](#multi-region-failover) 섹션을 참조하세요.    
**objectName**  
장애 조치 파라미터의 이름 또는 전체 ARN입니다. ARN을 사용하는 경우 ARN의 리전이 필드 `failoverRegion`와(과) 일치해야 합니다.  
**objectVersion**  
(선택 사항) 파라미터의 버전 ID입니다. 기본 `objectVersion`와(과) 일치해야 합니다. 파라미터를 업데이트할 때마다 버전 ID를 업데이트해야 하므로 권장하지 않습니다. 기본적으로 가장 최신 버전이 사용됩니다.  
**objectVersionLabel**  
(선택 사항) 버전의 별칭입니다. 기본값은 가장 최근 버전 `AWSCURRENT`입니다.

### Amazon EKS 포드에 파라미터를 탑재하기 위한 기본 SecretProviderClass 구성을 생성합니다.
<a name="create-SecretProviderClass-config"></a>

------
#### [ Pod Identity ]

동일한 Amazon EKS 클러스터에서 파라미터를 사용하는 SecretProviderClass:

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-parameter-store
spec:
  provider: aws
  parameters:
    objects: |
      - objectName: "MyParameter"
        objectType: "ssmparameter"
    usePodIdentity: "true"
```

------
#### [ IRSA ]

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: deployment-aws-parameter
spec:
  provider: aws
  parameters:
    objects: |
        - objectName: "MyParameter"
          objectType: "ssmparameter"
```

------

### SecretProviderClass 사용
<a name="ascp-scenarios-secretproviderclass"></a>

다음 예제를 사용하여 다양한 시나리오에 대한 `SecretProviderClass` 구성을 생성합니다.

#### 예: 이름 또는 ARN으로 파라미터 탑재
<a name="mount-by-name-arn"></a>

이 예제에서는 세 가지 유형의 파라미터를 탑재하는 방법을 보여줍니다.
+ 전체 ARN으로 지정된 파라미터
+ 이름으로 지정된 파라미터
+ 보안 암호의 파라미터 버전

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-parameters
spec:
  provider: aws
  parameters:
    objects: |
      - objectName: "arn:aws:ssm:us-east-2:777788889999:parameter:MyParameter2-d4e5f6"
      - objectName: "MyParameter3"
        objectType: "ssmparameter"
      - objectName: "MyParameter4"
        objectType: "ssmparameter"
        objectVersionLabel: "AWSCURRENT"
```

#### 예: 파라미터에서 키-값 페어 탑재
<a name="mount-key-value-pairs"></a>

이 예제는 JSON 형식 파라미터에서 특정 키-값 쌍을 탑재하는 방법을 보여줍니다.

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-parameters
spec:
  provider: aws
  parameters:
    objects: |
      - objectName: "arn:aws:ssm:us-east-2:777788889999:parameter:MyParameter-a1b2c3"
        jmesPath: 
            - path: username
              objectAlias: dbusername
            - path: password
              objectAlias: dbpassword
```

#### 예: 장애 조치 구성 예제
<a name="failover-examples"></a>

이 예제에서는 파라미터에 대한 장애 조치 구성 방법을 보여줍니다.

##### 다중 리전 파라미터 장애 조치
<a name="multi-region-failover"></a>

이 예제에서는 여러 리전에 복제된 파라미터에 대한 자동 장애 조치 구성 방법을 보여줍니다.

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-parameters
spec:
  provider: aws
  parameters:
    region: us-east-1
    failoverRegion: us-east-2
    objects: |
      - objectName: "MyParameter"
```

##### 다른 파라미터로 장애 조치
<a name="failover-parameter"></a>

이 예제에서는 (복제본이 아닌) 다른 파라미터로의 장애 조치 구성 방법을 보여줍니다.

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-parameters
spec:
  provider: aws
  parameters:
    region: us-east-1
    failoverRegion: us-east-2
    objects: |
      - objectName: "arn:aws:ssm:us-east-1:777788889999:parameter:MyParameter-a1b2c3"
        objectAlias: "MyMountedParameter"
        failoverObject: 
          - objectName: "arn:aws:ssm:us-east-2:777788889999:parameter:MyFailoverParameter-d4e5f6"
```

## 추가 리소스
<a name="additional-resources"></a>

Amazon EKS에서 ASCP 사용에 대한 자세한 내용은 다음 리소스를 참조하세요.
+ [Amazon EKS에서 Pod Identity 사용](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)
+ [GitHub의 AWS Secrets Store CSI 드라이버](https://github.com/aws/secrets-store-csi-driver-provider-aws)