

• 2026 年 4 月 30 日之後， AWS Systems Manager CloudWatch Dashboard 將不再可用。客戶可以繼續使用 Amazon CloudWatch 主控台來檢視、建立和管理其 Amazon CloudWatch 儀表板，就像現在一樣。如需詳細資訊，請參閱 [Amazon CloudWatch Dashboard 文件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

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

# 在 Amazon Elastic Kubernetes Service 中使用 Parameter Store 參數
<a name="integrate_eks"></a>

若要顯示 Parameter Store (AWS Systems Manager 的工具) 中的參數，作為掛載於 Amazon EKS Pod 的檔案，您可以將 AWS Secrets and Configuration Provider 用於 Kubernetes Secrets Store CSI Driver。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 進行身分驗證的方法。第一種方法使用服務帳戶的 IAM 角色 (IRSA)。第二種方法使用 Pod 身分識別。每種方法都有其優點和使用案例。

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

具有服務帳戶 IAM 角色 (IRSA) 的 ASCP 可讓您從 Parameter Store 將參數掛載為 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 身分識別的 ASCP 方法可增強安全性，並簡化在 Parameter Store 中存取參數的組態。此方法在下列情況下非常有用：
+ 您需要在 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，您可以將來自 的參數Parameter Store和來自 的秘密掛載 AWS Secrets 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。儲存庫還包含用於透過將 `objectType` 值從 `secretsmanager` 變更為 `ssmparameter` 來建立和掛載秘密的範例 YAML 檔案。

在安裝期間，您可以將 ASCP 設定為使用 FIPS 端點。如需 Systems Manager 端點的清單，請參閱 *Amazon Web Services 一般參考* 中的 [Systems Manager service endpoints](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` 的 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 的狀態。

   使用您的 Pod ID 取代*預設預留位置文字*：

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

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

   與 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)
+ [AWS Secrets 在 GitHub 上存放 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 上執行的應用程式提供增強的安全性、簡化組態並改善效能。從 AWS Systems Manager Parameter Store Secrets Manager 擷取參數或秘密時，Pod Identity 可簡化 Amazon EKS 的 AWS Identity and Access Management (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 身分識別代理程式附加元件。

  使用您的值取代*預設預留位置文字*：

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

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

1. 建立許可政策，針對 Pod 需要存取的參數，授予 `ssm:GetParameters` 和 `ssm:DescribeParameters` 存取該參數的許可。

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. 建立指定要在 Pod 中掛載哪些參數或秘密的 `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 身分識別之間，`SecretProviderClass` 主要差異是選用參數 `usePodIdentity`。這是可決定身分驗證方法的選用欄位。未指定時，它會預設為使用服務帳戶的 IAM 角色 (IRSA)。
   + 若要使用 EKS Pod 身分識別，請使用下列任何值：`"true", "True", "TRUE", "t", "T"`。
   + 若要明確使用 IRSA，請設定為下列任何值：`"false", "False", "FALSE", "f", or "F"`。

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

   ```
   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 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/MyParameter
```

**設定 Amazon EKS Pod 身分識別以存取 Parameter Store 中的參數**

1. 建立許可政策，針對 Pod 需要存取的參數，授予 `ssm:GetParameters` 和 `ssm:DescribeParameters` 存取該參數的許可。

1. 如果您還沒有參數，請在 Parameter Store 中建立參數。如需相關資訊，請參閱[在 Systems Manager 中建立 Parameter Store 參數](sysman-paramstore-su-create.md)。

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

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

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

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

   ```
   kubectl get pods
   ```

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

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

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

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

# 使用 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 對 Parameter Store 中參數的存取權**

1. 建立許可政策，針對 Pod 需要存取的參數，授予 `ssm:GetParameters` 和 `ssm:DescribeParameters` 存取該參數的許可。

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 name-space`。

   ```
   kubectl get pods
   ```

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

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

**若要查看 ASCP 的錯誤**
+ 若要在提供者記錄中尋找更多資訊，請在下列命令中，針對 *pod-id* 使用 *csi-secrets-store-provider-aws* Pod 的 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 秘密和組態提供者程式碼範例
<a name="ascp-examples"></a>

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

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

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

**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/Parameter` 掛載為 `My_Path_Parameter`。  
若要避免發生字元取代的情況，請輸入字串 `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**  
必要. 指定要擷取的參數或秘密的名稱。對於 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 Pod 中秘密的檔案名稱。如果您未指定此欄位，`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 Pod 中的檔案名稱。如果欄位包含連字號，請使用單引號將其逸出，例如：`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`。

### 建立基本 SecretProviderClass 組態，以在 Amazon EKS Pod 中掛載參數。
<a name="create-SecretProviderClass-config"></a>

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

SecretProviderClass 可在相同的 Amazon EKS 叢集中使用參數：

```
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 身分識別](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)
+ [AWS Secrets 在 GitHub 上存放 CSI 驅動程式](https://github.com/aws/secrets-store-csi-driver-provider-aws)