

• AWS Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 将 AWS Secrets and Configuration Provider CSI 与适用于 Amazon EKS 的容器组身份结合使用
<a name="ascp-pod-identity-integration"></a>

AWS Secrets and Configuration Provider 与适用于 Amazon Elastic Kubernetes Service 的容器组身份代理集成，为在 Amazon EKS 上运行的应用程序提供了增强的安全性、简化的配置以及更高的性能。容器组身份简化了从 AWS Systems Manager Parameter Store 检索参数或从 Secrets Manager 检索密钥时的适用于 Amazon EKS 的 AWS Identity and Access Management（IAM）身份验证流程。

Amazon EKS 容器组身份通过直接在 Amazon EKS 接口设置权限，减少了操作步骤，且无需在 Amazon EKS 和 IAM 服务之间切换，从而简化了为 Kubernetes 应用程序配置 IAM 权限的过程。容器组身份允许在多个集群中共用一个 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 角色。

1. ASCP 会使用此角色通过 AWS 服务 进行身份验证。

1. 如果获得授权，ASCP 会检索请求的参数并将其提供给容器组（pod）。

有关更多信息，请参阅《Amazon EKS 用户指南**》中的[了解 Amazon EKS 容器组身份的工作原理](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-how-it-works.html)。

## 先决条件
<a name="prerequisites"></a>

**重要**  
仅云中的 Amazon EKS 支持容器组身份。[Amazon EKS Anywhere](https://aws.amazon.com/eks/eks-anywhere/)、[AWS 云端 Red Hat OpenShift 服务](https://aws.amazon.com/rosa/) 或 Amazon EC2 实例上自行管理的 Kubernetes 集群不支持容器组身份。
+ Amazon EKS 集群（版本 1.24 或更高版本）
+ 通过 `kubectl` 访问 AWS CLI 和 Amazon EKS 集群
+ （可选）访问两个 AWS 账户以实现跨账户访问

## 安装 Amazon EKS 容器组身份代理
<a name="install-pod-identity-agent"></a>

要将容器组身份与集群结合使用，必须安装 Amazon EKS 容器组身份代理附加组件。

**安装容器组身份代理**
+ 在集群上安装容器组身份代理附加组件。

  将*默认占位符文本*替换为自己的值：

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

## 通过容器组身份设置 ASCP
<a name="pod-identity-setup"></a>

1. 创建权限策略，授予对容器组（pod）需要访问的参数的 `ssm:GetParameters` 和 `ssm:DescribeParameters` 权限。

1. 创建可由容器组身份的 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. 创建容器组身份关联。有关示例，请参阅《Amazon EKS 用户指南**》中的[创建容器组身份关联](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html#pod-id-association-create)

1. 创建 `SecretProviderClass`，用于指定要挂载到容器组（pod）中的参数或密钥：

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

   IRSA 和容器组身份在 `SecretProviderClass` 中的关键区别在于可选参数 `usePodIdentity`。这是一个可选字段，用于确定身份验证方法。如果未指定，则默认对服务账户（IRSA）使用 IAM 角色。
   + 要使用 EKS 容器组身份，请使用以下任意值：`"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 用户指南*》中的[接口 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
```

**设置 Amazon EKS 容器组身份以访问 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
  ```