

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 将 AWS 密钥和配置提供商 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 或更高版本）
+ 通过以下方式访问 AWS CLI 和 Amazon EKS 集群 `kubectl`

## 设置访问控制
<a name="integrating_ascp_irsa_access"></a>

ASCP 会检索 Amazon EKS 容器组身份并将其交换为 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 用户指南*》中的[接口 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 文件.yaml 和 [ExampleSecretProviderClass.yaml 将密钥挂载为文件。](https://github.com/aws/secrets-store-csi-driver-provider-aws/blob/main/examples/ExampleSecretProviderClass-IRSA.yaml) ExampleDeployment](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
  ```