

• 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 与服务账户的 IAM 角色（IRSA）结合使用
<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 容器组身份并将其交换为 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 用户指南*》中的[接口 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 容器组（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
  ```