

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon Elastic Kubernetes Service 中使用 AWS Secrets Manager 秘密
<a name="integrate_eks"></a>

若要將來自 AWS Secrets Manager (ASCP) 的秘密顯示為掛載在 Amazon EKS Pod 中的檔案，您可以使用 AWS Kubernetes Secrets Store CSI Driver 的 Secrets and Configuration Provider。ASCP 可與執行 Amazon EC2 節點群組的 Amazon Elastic Kubernetes Service 1.17\$1 搭配使用。不支援 Amazon EC2 節點群組。 AWS Fargate 透過 ASCP，您可以在 Secrets Manager 中存放和管理您的秘密，然後透過在 Amazon EKS 上執行的工作負載擷取這些秘密。如果您的秘密包含 JSON 格式的多個鍵/值對，您可以選擇要在 Amazon EKS 中掛載的鍵/值對。ASCP 使用 JMESPath 語法來查詢秘密中的鍵值對。ASCP 也可與 Parameter Store 參數搭配使用。ASCP 提供兩種使用 Amazon EKS 進行身分驗證的方法。第一種方法使用服務帳戶的 IAM 角色 (IRSA)。第二種方法使用 Pod 身分識別。每種方法都有其優點和使用案例。

## 具有服務帳戶 IAM 角色 (IRSA) 的 ASCP
<a name="csi_driver_overview"></a>

具有服務帳戶 IAM 角色 (IRSA) 的 ASCP 可讓您將來自 的秘密掛載 AWS Secrets Manager 為 Amazon EKS Pod 中的檔案。此方法適用於下列情況：
+ 您需要將秘密掛載為 Pod 中的檔案。
+ 您在 Amazon EC2 節點群組中使用 Amazon EKS 1.17 版或更新版本。
+ 您想要從 JSON 格式的秘密擷取特定的鍵/值對。

如需詳細資訊，請參閱[使用 AWS Secrets and Configuration Provider CSI 搭配服務帳戶 (IRSA) 的 IAM 角色](integrating_ascp_irsa.md)。

## 具有 Pod 身分識別的 ASCP
<a name="pod_identity_overview"></a>

具有 Pod Identity 的 ASCP 方法可增強安全性，並簡化在 Amazon EKS 中存取秘密的組態。此方法在下列情況下非常有用：
+ 您需要在 Pod 層級進行更精細的許可管理。
+ 您使用 Amazon EKS 1.24 版或更新版本。
+ 您想要改善效能與可擴展性。

如需詳細資訊，請參閱[使用 AWS 秘密和組態提供者 CSI 搭配 Amazon EKS 的 Pod 身分](ascp-pod-identity-integration.md)。

## 選擇正確的方法
<a name="comparison"></a>

決定具有 IRSA 的 ASCP 和具有 Pod 身分識別的 ASCP 時，請考慮下列因素：
+ Amazon EKSversion：Pod 身分識別需要 Amazon EKS 1.24 版或更高版本，而 CSI 驅動程式可與 Amazon EKS 1.17 版或更高版本搭配使用。
+ 安全需求：Pod 身分識別在 Pod 層級提供更精細的控制。
+ 效能：Pod 身分識別通常在大規模環境中表現較佳。
+ 複雜性：Pod 身分識別透過消除對單獨服務帳戶的需求，簡化設定。

選擇最符合您特定需求與 Amazon EKS 環境的方法。

# 安裝適用於 Amazon EKS 的 ASCP
<a name="ascp-eks-installation"></a>

本節說明如何安裝 Amazon EKS 的 AWS Secrets and Configuration Provider。使用 ASCP，您可以從 Secrets Manager 將秘密掛載，並從 將參數掛載 AWS Systems Manager 為 Amazon EKS Pod 中的檔案。

## 先決條件
<a name="prerequisites"></a>
+ Amazon EKS 叢集
  + 適用於 Pod 身分識別的 1.24 版或更新版本
  + 適用於 IRSA 的 1.17 版或更新版本
+  AWS CLI 已安裝和設定的
+ 已為 Amazon EKS 叢集安裝和設定 kubectl
+ Helm (3.0 版或更新版本)

## 安裝和設定 ASCP
<a name="integrating_csi_driver_install"></a>

您可在 [secrets-store-csi-provider-aws](https://github.com/aws/secrets-store-csi-driver-provider-aws) 儲存庫中的 GitHub 取得 ASCP。儲存庫還包含用於建立和掛載秘密的範例 YAML 檔案。

在安裝期間，您可以將 ASCP 設定為使用 FIPS 端點。如需端點清單，請參閱 [AWS Secrets Manager 端點](asm_access.md#endpoints)。

**安裝 ASCP 做為 EKS 附加元件**

1. 安裝 `eksctl`([安裝指示](https://docs.aws.amazon.com/eks/latest/eksctl/installation.html))

1. 執行下列命令，以[預設組態](https://github.com/aws/secrets-store-csi-driver-provider-aws/blob/main/charts/secrets-store-csi-driver-provider-aws/values.yaml)安裝 附加元件：

   ```
   eksctl create addon --cluster <your_cluster> --name aws-secrets-store-csi-driver-provider
   ```

   如果您想要設定附加元件，請改為執行下列安裝命令：

   ```
   aws eks create-addon --cluster-name <your_cluster> --addon-name aws-secrets-store-csi-driver-provider --configuration-values 'file://path/to/config.yaml'
   ```

   組態檔案可以是 YAML 或 JSON 檔案。若要查看附加元件的組態結構描述：

   1. 執行下列命令，並記下 附加元件的最新版本：

      ```
      aws eks describe-addon-versions --addon-name aws-secrets-store-csi-driver-provider
      ```

   1. 執行下列命令以查看附加元件的組態結構描述，`<version>`將 取代為上一個步驟的 版本：

      ```
      aws eks describe-addon-configuration --addon-name aws-secrets-store-csi-driver-provider --addon-version <version>
      ```

**使用 Helm 安裝 ASCP**

1. 為確認儲存庫指向最新圖表，請使用 `helm repo update.`

1. 安裝圖表。以下是 `helm install`命令的範例：

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

   1. 若要使用 FIPS 端點，請新增下列旗標：`--set useFipsEndpoint=true`

   1. 若要設定限流，請新增下列旗標：`--set-json 'k8sThrottlingParams={"qps": "number of queries per second", "burst": "number of queries per second"}'`

   1. 如果您的叢集已安裝 Secrets Store CSI 驅動程式，請新增下列旗標：`--set secrets-store-csi-driver.install=false`。這將略過安裝 Secrets Store CSI 驅動程式做為相依性。

**使用儲存庫中的 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` 的 Pod 正在執行。

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` 狀態的 Pod。

執行這些命令之後，如果一切皆正確設定，您應該會看到所有元件都在執行，而且沒有任何錯誤。如果您遇到任何問題，您可能需要檢查有問題之特定 Pod 的日誌，以進行疑難排解。

## 疑難排解
<a name="troubleshooting"></a>

1. 若要檢查 ASCP 提供者的日誌，請執行：

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

1. 檢查`kube-system`命名空間中所有 Pod 的狀態：

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

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

   與 CSI 驅動程式和 ASCP 相關的所有 Pod 都應該處於「執行中」狀態。

1. 檢查 CSI 驅動程式版本：

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

   此命令應傳回已安裝 CSI 驅動程式的相關資訊。

## 其他資源
<a name="additional-resources"></a>

如需有關如何搭配 Amazon EKS 使用 ASCP 的詳細資訊，請參閱下列資源：
+ [搭配 Amazon EKS 使用 Pod 身分識別](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)

# 使用 AWS 秘密和組態提供者 CSI 搭配 Amazon EKS 的 Pod 身分
<a name="ascp-pod-identity-integration"></a>

 AWS Secrets and Configuration Provider 與 Pod Identity Agent for Amazon Elastic Kubernetes Service 整合，可為在 Amazon EKS 上執行的應用程式提供增強的安全性、簡化組態並改善效能。從 Secrets Manager 或從 AWS Systems Manager 參數存放區擷取秘密或參數時，Pod Identity 可簡化 Amazon EKS 的 IAM 身分驗證。

Amazon EKS Pod 身分識別透過允許直接透過 Amazon EKS 介面設定許可、減少步驟數量，並消除在 Amazon EKS 和 IAM 服務之間切換的需求，簡化設定 Kubernetes 應用程式 IAM 許可的程序。Pod 身分識別可讓您跨多個叢集使用單一 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 身分識別可將 IAM 角色指派給 Pod。

1. ASCP 使用此角色進行身分驗證 AWS 服務。

1. 如果獲得授權，ASCP 會擷取請求的秘密，並將其提供給 Pod。

如需詳細資訊，請參閱《Amazon EKS 使用者指南》**中的[了解 Amazon EKS Pod 身分識別的運作方式](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-how-it-works.html)。

## 先決條件
<a name="prerequisites"></a>

**重要**  
僅雲端中的 Amazon EKS 支援 Pod 身分識別。Amazon EC2 執行個體上的 [Amazon EKS Anywhere](https://aws.amazon.com/eks/eks-anywhere/)、[Red Hat OpenShift Service on AWS](https://aws.amazon.com/rosa/) 或自我管理型 Kubernetes 叢集不支援此功能。
+ Amazon EKS 叢集 (1.24 版或更新版本)
+ 透過 存取 AWS CLI 和 Amazon EKS 叢集 `kubectl`
+ 存取兩個 AWS 帳戶 （用於跨帳戶存取）

## 安裝 Amazon EKS Pod 身分識別代理程式
<a name="install-pod-identity-agent"></a>

若要將 Pod 身分識別與叢集搭配使用，您必須安裝 Amazon EKS Pod 身分識別代理程式附加元件。

**安裝 Pod 身分識別代理程式**
+ 在叢集上安裝 Pod Identity Agent 附加元件：

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

## 使用 Pod 身分識別設定 ASCP
<a name="pod-identity-setup"></a>

1. 建立許可政策，以授予 Pod 需要存取之秘密的 `secretsmanager:GetSecretValue`和 `secretsmanager:DescribeSecret`許可。如需政策範例，請參閱 [範例：讀取和描述個別秘密的許可](auth-and-access_iam-policies.md#auth-and-access_examples-read-and-describe)。

1. 建立由 Amazon EKS 服務主體擔任的 IAM 角色，用於 Pod 身分識別：

------
#### [ 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 身分識別關聯。如需範例，請參閱《Amazon EKS 使用者指南》**中的[建立 Pod 身分識別關聯](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html#pod-id-association-create)

1. 建立 `SecretProviderClass`，指定要掛載在 Pod 中的秘密：

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

   在 IRSA 和 Pod 身分識別之間，`SecretProviderClass` 主要差異是選用參數 `usePodIdentity`。這是可決定身分驗證方法的選用欄位。未指定時，它會預設為使用服務帳戶的 IAM 角色 (IRSA)。
   + 若要使用 EKS Pod 身分識別，請使用下列任何值：`"true", "True", "TRUE", "t", "T"`。
   + 若要明確使用 IRSA，請設定為下列任何值：`"false", "False", "FALSE", "f", or "F"`。

1. 在 下部署掛載秘密的 Pod`/mnt/secrets-store`：

   ```
   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 User Guide* 中的 [Interface VPC endpoints](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/MySecret
```

**設定 Amazon EKS Pod Identity 以存取 Secrets Manager 中的秘密**

1. 建立許可政策，以授予 Pod 需要存取之秘密的 `secretsmanager:GetSecretValue`和 `secretsmanager:DescribeSecret`許可。如需政策範例，請參閱 [範例：讀取和描述個別秘密的許可](auth-and-access_iam-policies.md#auth-and-access_examples-read-and-describe)。

1. 如果您還沒有秘密，請在 Secrets Manager 中建立秘密。

## 疑難排解
<a name="integrating_aspc_pod_trouble"></a>

您可以透過描述 Pod 部署來檢視大多數錯誤。

**若要查看容器的錯誤訊息**

1. 使用下列命令取得 Pod 名稱清單。如果不使用預設命名空間，請使用 `-n NAMESPACE`。

   ```
   kubectl get pods
   ```

1. 若要描述 Pod，請在下列命令中，針對 *PODID* 使用您在上一個步驟中找到的 Pod 中的 Pod ID。如果不使用預設命名空間，請使用 `-n NAMESPACE`。

   ```
   kubectl describe pod/PODID
   ```

**若要查看 ASCP 的錯誤**
+ 若要在提供者日誌中尋找更多資訊，請在下列命令中，針對 *PODID* 使用 *csi-secrets-store-provider-aws* Pod 的 ID。

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

# 使用 AWS Secrets and Configuration Provider CSI 搭配服務帳戶 (IRSA) 的 IAM 角色
<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 版或更新版本)
+ 透過 存取 AWS CLI 和 Amazon EKS 叢集 `kubectl`

## 設定存取控制
<a name="integrating_ascp_irsa_access"></a>

ASCP 會擷取 Amazon EKS Pod 身分識別，並將其交換為 IAM 角色。您可以在 IAM 政策中為該 IAM 角色設定許可。當 ASCP 擔任 IAM 角色時，它會存取您授權的秘密。除非您也將其與 IAM 角色建立關聯，否則其他容器無法存取秘密。

**授予 Amazon EKS Pod 存取 Secrets Manager 中的秘密的權限**

1. 建立許可政策，將 Pod 需要存取的秘密授予 `secretsmanager:GetSecretValue`和 `secretsmanager:DescribeSecret`許可。如需政策範例，請參閱 [範例：讀取和描述個別秘密的許可](auth-and-access_iam-policies.md#auth-and-access_examples-read-and-describe)。

1. 如果尚未建立，請為叢集建立 IAM OpenID Connect (OIDC) 提供者。如需詳細資訊，請參閱《Amazon EKS 使用者指南》**中的[為您的叢集建立 IAM OIDC 身分提供者](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 使用者指南》**中的[建立服務帳戶的 IAM 角色](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 User Guide* 中的 [Interface VPC endpoints](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 Pod 位於同一命名空間。

### 將秘密掛載為檔案
<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` 套用至 Pod：

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

1. 部署您的 Pod：

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

1. ASCP 可掛載檔案。

## 疑難排解
<a name="integrating_ascp_irsa_trouble"></a>

您可以透過描述 Pod 部署來檢視大多數錯誤。

**若要查看容器的錯誤訊息**

1. 使用下列命令取得 Pod 名稱清單。如果不使用預設命名空間，請使用 `-n nameSpace`。

   ```
   kubectl get pods
   ```

1. 若要描述 Pod，請在下列命令中，針對 *podId* 使用您在上一個步驟中找到的 Pod 中的 Pod ID。如果不使用預設命名空間，請使用 `-n nameSpace`。

   ```
   kubectl describe pod/podId
   ```

**若要查看 ASCP 的錯誤**
+ 若要在提供者日誌中尋找詳細資訊，請在下列命令中，針對 *podId* 使用 *csi-secrets-store-provider-aws* Pod 的 ID。

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

**驗證是否已安裝 `SecretProviderClass` CRD：**

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

  此命令應會傳回有關 `SecretProviderClass` 自訂資源定義的資訊。
+ 

**驗證是否已建立 SecretProviderClass 物件。**

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

# AWS 秘密和組態提供者程式碼範例
<a name="ascp-examples"></a>

## ASCP 身分驗證與存取控制範例
<a name="ascp-auth-access-examples"></a>

### 範例：允許 Amazon EKS Pod 身分識別服務 (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:
```

參數欄位包含掛載請求的詳細資訊：

**region**  
（選用） 秘密 AWS 區域 的 。如果不使用此欄位，ASCP 會從節點上的註釋尋找區域。此查閱會增加掛載請求的額外負荷，因此建議您為使用大量 Pod 的叢集提供區域。  
如果您也指定 `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 身分識別，請使用下列任何值：`"true"`、`"True"`、`"TRUE"`、`"t"` 或 `"T"`。
+ 若要明確使用 IRSA，請設定下列任何值：`"false"`、`"False"`、`"f"`、`"FALSE"` 或 `"F"`。

**preferredAddressType**  
(選用) 指定 Pod 身分識別代理程式端點通訊的偏好 IP 位址類型。此欄位僅在使用 EKS Pod 身分識別功能時適用，並在使用服務帳戶的 IAM 角色時忽略。值不區分大小寫。有效的值如下：  
+ `"ipv4"`、`"IPv4"` 或 `"IPV4"` – 強制使用 Pod 身分識別代理程式 IPv4 端點
+ `"ipv6"`、`"IPv6"` 或 `"IPV6"` – 強制使用 Pod 身分識別代理程式 IPv6 端點
+ 未指定 – 使用自動端點選擇、先嘗試 IPv4 端點，並在 IPv4 失敗時退回到 IPv6 端點

**objects**  
包含待掛載秘密的 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 參數存放區，這是 參數[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 Pod 中秘密的檔案名稱。如果您未指定此欄位，`objectName` 會顯示為檔案名稱。  
**filePermission**  
（選用） 指定用來掛載秘密的檔案許可的 4 位數八進位字串。如果您未指定此欄位，則會預設為 `"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 Pod 中的檔案名稱。如果欄位包含連字號，請使用單引號將其逸出，例如：`objectAlias: '"hyphenated-alias"'`。  
**filePermission**  
（選用） 指定用來掛載秘密的檔案許可的 4 位數八進位字串。如果您未指定此欄位，則會預設為父物件的檔案許可。  
**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)。

### 建立基本 SecretProviderClass 組態，以在 Amazon EKS Pod 中掛載秘密。
<a name="w2aac19c17c18c25c11"></a>

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

SecretProviderClass 可在相同的 Amazon EKS 叢集中使用秘密：

```
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 身分識別](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)