

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

# AWS 보안 암호 및 구성 공급자 코드 예제
<a name="ascp-examples"></a>

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

### 예: Amazon EKS Pod Identity 서비스(pods.eks.amazonaws.com)가 역할을 수임하고 세션에 태그를 지정하도록 허용하는 IAM 정책:
<a name="w2aac19c17c18b5b3"></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="w2aac19c17c18c25b5"></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/Secret`은 `My_Path_Secret`으로 탑재됩니다.  
문자 대체를 방지하려면 `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**  
필수 사항입니다. 가져올 보안 암호의 이름을 지정합니다. 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일 수 있습니다. SSM 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일 수 있습니다.  
**objectType**  
`objectName`으로 Secrets Manager ARN을 사용하지 않는 경우에 필요합니다. `secretsmanager` 또는 `ssmparameter`입니다.  
**objectAlias**  
(선택 사항) Amazon EKS 포드에 있는 보안 암호의 파일 이름입니다. 이 필드를 지정하지 않은 경우 `objectName`이 파일 이름으로 나타납니다.  
**filePermission**  
(선택 사항) 보안 암호를 탑재할 파일 권한을 지정하는 4자리 8진수 문자열입니다. 이 필드를 지정하지 않으면 `"0644"`로 기본 설정됩니다.  
**objectVersion**  
(선택 사항) 보안 암호의 버전 ID입니다. 보안 암호를 업데이트할 때마다 버전 ID를 업데이트해야 하므로 권장하지 않습니다. 기본적으로 가장 최신 버전이 사용됩니다. `failoverRegion`을(를) 포함하는 경우 이 필드는 기본 `objectVersion`을(를) 나타냅니다.  
**objectVersionLabel**  
(선택 사항) 버전의 별칭입니다. 기본 버전은 가장 최근 버전 AWSCURRENT입니다. 자세한 내용은 [보안 암호 버전](whats-in-a-secret.md#term_version) 단원을 참조하십시오. `failoverRegion`을(를) 포함하는 경우 이 필드는 기본 `objectVersionLabel`을(를) 나타냅니다.  
**jmesPath**  
(선택 사항) Amazon EKS에 탑재할 파일에 대한 보안 암호의 키 맵입니다. 이 필드를 사용하려면 보안 암호 값이 JSON 형식이어야 합니다. 이 필드를 사용하는 경우 `path` 및 `objectAlias` 하위 필드를 포함해야 합니다.    
**경로**  
보안 암호 값의 JSON에 있는 키/값 쌍의 키입니다. 필드에 하이픈이 포함된 경우 작은 따옴표를 사용하여 하이픈을 이스케이프 처리합니다. 예: `path: '"hyphenated-path"'`  
**objectAlias**  
Amazon EKS 포드에 탑재할 파일 이름입니다. 필드에 하이픈이 포함된 경우 작은 따옴표를 사용하여 하이픈을 이스케이프 처리합니다. 예: `objectAlias: '"hyphenated-alias"'`  
**filePermission**  
(선택 사항) 보안 암호를 탑재할 파일 권한을 지정하는 4자리 8진수 문자열입니다. 이 필드를 지정하지 않으면 상위 객체의 파일 권한으로 기본 설정됩니다.  
**failoverObject**  
(선택 사항) 이 필드를 지정하는 경우 ASCP는 기본 `objectName`에 지정된 보안 암호와 `failoverObject` `objectName` 하위 필드에 지정된 보안 암호를 모두 검색하려고 시도합니다. 둘 중 하나가 예를 들어 인증 문제에 대해 4xx 오류를 반환하는 경우 ASCP는 어느 암호도 탑재하지 않습니다. 기본 `objectName`에서 보안 암호가 성공적으로 검색되면 ASCP는 해당 암호 값을 탑재합니다. 기본 `objectName`에서는 보안 암호가 성공적으로 검색되지 않고 장애 조치 `objectName`에서 성공적으로 검색되는 경우 ASCP는 해당 암호 값을 탑재합니다. 이 필드를 포함하는 경우 필드 `objectAlias`도 포함해야 합니다. 이 필드 사용 방법의 예는 [다른 보안 암호로 장애 조치](#failover-secret) 섹션을 참조하세요.  
일반적으로 장애 조치 암호가 복제본이 아닌 경우 이 필드를 사용합니다. 복제본을 지정하는 방법에 대한 예는 [다중 리전 보안 암호 장애 조치](#multi-region-failover) 섹션을 참조하세요.    
**objectName**  
장애 조치 암호의 이름 또는 전체 ARN입니다. ARN을 사용하는 경우 ARN의 리전이 필드 `failoverRegion`와(과) 일치해야 합니다.  
**objectVersion**  
(선택 사항) 보안 암호의 버전 ID입니다. 기본 `objectVersion`와(과) 일치해야 합니다. 보안 암호를 업데이트할 때마다 버전 ID를 업데이트해야 하므로 권장하지 않습니다. 기본적으로 가장 최신 버전이 사용됩니다.  
**objectVersionLabel**  
(선택 사항) 버전의 별칭입니다. 기본 버전은 가장 최근 버전 AWSCURRENT입니다. 자세한 내용은 [보안 암호 버전](whats-in-a-secret.md#term_version) 단원을 참조하십시오.

### Amazon EKS 포드에 보안 암호를 탑재하기 위한 기본 SecretProviderClass 구성을 생성합니다.
<a name="w2aac19c17c18c25c11"></a>

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

동일한 Amazon EKS 클러스터에서 보안 암호를 사용하는 SecretProviderClass:

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

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

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

------

### 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-secrets
spec:
  provider: aws
  parameters:
    objects: |
      - objectName: "arn:aws:secretsmanager:us-east-2:777788889999:secret:MySecret2-d4e5f6"
      - objectName: "MySecret3"
        objectType: "secretsmanager"
      - objectName: "MySecret4"
        objectType: "secretsmanager"
        objectVersionLabel: "AWSCURRENT"
```

#### 예: 보안 암호에서 키/값 쌍 탑재
<a name="mount-key-value-pairs"></a>

이 예제는 JSON 형식 보안 암호에서 특정 키-값 쌍을 탑재하는 방법을 보여줍니다.

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

#### 예: 파일 권한으로 보안 암호 탑재
<a name="mount-by-permission"></a>

이 예제에서는 특정 파일 권한으로 보안 암호를 탑재하는 방법을 보여줍니다.

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-secrets
spec:
  provider: aws
  parameters:
    objects: |
      - objectName: "mySecret"
        objectType: "secretsmanager"
        filePermission: "0600"
        jmesPath: 
            - path: username
              objectAlias: dbusername
              filePermission: "0400"
```

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

이 예제에서는 보안 암호에 대한 장애 조치 구성 방법을 보여줍니다.

##### 다중 리전 보안 암호 장애 조치
<a name="multi-region-failover"></a>

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

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

##### 다른 보안 암호로 장애 조치
<a name="failover-secret"></a>

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

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-secrets
spec:
  provider: aws
  parameters:
    region: us-east-1
    failoverRegion: us-east-2
    objects: |
      - objectName: "arn:aws:secretsmanager:us-east-1:777788889999:secret:MySecret-a1b2c3"
        objectAlias: "MyMountedSecret"
        failoverObject: 
          - objectName: "arn:aws:secretsmanager:us-east-2:777788889999:secret:MyFailoverSecret-d4e5f6"
```

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

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