Skip to main content
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

创建IAM角色和AWS机密

贡献者 netapp-aruldeepa netapp-mwallis

您可以通过作为AWS IAM角色进行身份验证(而不是提供显式AWS凭据)来配置Kubbernetes Pod以访问AWS资源。

备注 要使用AWS IAM角色进行身份验证、您必须使用EKS部署Kubenetes集群。

创建AWS机密管理器密钥

由于Trident将对FSx Sx Sv服务器发出API来为您管理存储、因此它需要凭据才能执行此操作。传递这些凭据的安全方法是通过AWS机密管理器密钥。因此、如果您还没有、则需要创建一个AWS机密管理器密钥、其中包含vsadmin帐户的凭据。

以下示例将创建一个AWS机密管理器密钥来存储Trident CSI凭据:

aws secretsmanager create-secret --name trident-secret --description "Trident CSI credentials"\
  --secret-string "{\"username\":\"vsadmin\",\"password\":\"<svmpassword>\"}"

创建IAM策略

Trident还需要AWS权限才能正常运行。因此、您需要创建一个策略来为Trident提供所需的权限。

以下示例将使用AWS命令行界面创建IAM策略:

aws iam create-policy --policy-name AmazonFSxNCSIDriverPolicy --policy-document file://policy.json
  --description "This policy grants access to Trident CSI to FSxN and Secrets manager"

策略JSON示例

{
  "Statement": [
    {
      "Action": [
        "fsx:DescribeFileSystems",
        "fsx:DescribeVolumes",
        "fsx:CreateVolume",
        "fsx:RestoreVolumeFromSnapshot",
        "fsx:DescribeStorageVirtualMachines",
        "fsx:UntagResource",
        "fsx:UpdateVolume",
        "fsx:TagResource",
        "fsx:DeleteVolume"
      ],
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Action": "secretsmanager:GetSecretValue",
      "Effect": "Allow",
      "Resource": "arn:aws:secretsmanager:<aws-region>:<aws-account-id>:secret:<aws-secret-manager-name>*"
    }
  ],
  "Version": "2012-10-17"
}

为服务帐户关联 (IRSA) 创建 Pod Identity 或 IAM 角色

您可以使用 EKS Pod Identity 配置 Kubernetes 服务账户,使其代入 AWS Identity and Access Management (IAM) 角色,或使用 IAM 角色进行服务账户关联 (IRSA)。任何配置为使用该服务账户的 Pod 都可以访问该角色有权访问的任何 AWS 服务。

Pod 身份

Amazon EKS Pod Identity 关联提供了管理应用程序凭证的能力,类似于 Amazon EC2 实例配置文件向 Amazon EC2 实例提供凭证的方式。

在您的 EKS 集群上安装 Pod Identity

您可以通过 AWS 控制台或使用以下 AWS CLI 命令创建 Pod 身份:

aws eks create-addon --cluster-name <EKS_CLUSTER_NAME> --addon-name eks-pod-identity-agent

更多信息请参阅"设置 Amazon EKS Pod Identity Agent"

创建 trust-relationship.json

创建 trust-relationship.json 文件,使 EKS 服务主体能够承担 Pod Identity 的此角色。然后创建一个具有以下信任策略的角色:

aws iam create-role \
  --role-name fsxn-csi-role --assume-role-policy-document file://trust-relationship.json \
  --description "fsxn csi pod identity role"

trust-relationship.json 文件

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "pods.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}

将角色策略附加到 IAM 角色

将上一步中的角色策略附加到创建的 IAM 角色:

aws iam attach-role-policy \
  --policy-arn arn:aws:iam::aws:111122223333:policy/fsxn-csi-policy \
  --role-name fsxn-csi-role

创建 pod 身份关联

在 IAM 角色和 Trident 服务帐户(trident-controller)之间创建 pod 身份关联

aws eks create-pod-identity-association \
  --cluster-name <EKS_CLUSTER_NAME> \
  --role-arn arn:aws:iam::111122223333:role/fsxn-csi-role \
  --namespace trident --service-account trident-controller
服务帐户关联 (IRSA) 的 IAM 角色

使用 AWS CLI

aws iam create-role --role-name AmazonEKS_FSxN_CSI_DriverRole \
  --assume-role-policy-document file://trust-relationship.json

信任关系.json文件:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::<account_id>:oidc-provider/<oidc_provider>"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "<oidc_provider>:aud": "sts.amazonaws.com",
          "<oidc_provider>:sub": "system:serviceaccount:trident:trident-controller"
        }
      }
    }
  ]
}

更新文件中的以下值 trust-relationship.json

  • AWS-您的<account_id>帐户ID

  • EKS-<oidc_provider>集群的OIDC*。您可以通过运行以下命令来获取oidc_Provider:

    aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer"\
      --output text | sed -e "s/^https:\/\///"

将IAM角色附加到IAM策略

创建角色后、使用以下命令将在上述步骤中创建的策略附加到此角色:

aws iam attach-role-policy --role-name my-role --policy-arn <IAM policy ARN>

验证OCD提供程序是否关联

验证OIDC提供程序是否已与集群关联。您可以使用以下命令进行验证:

aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4

如果输出为空、请使用以下命令将IAM OIDC与集群关联:

eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve

如果您使用 eksctl,请使用以下示例为 EKS 中的服务账户创建 IAM 角色:

eksctl create iamserviceaccount --name trident-controller --namespace trident \
  --cluster <my-cluster> --role-name AmazonEKS_FSxN_CSI_DriverRole --role-only \
  --attach-policy-arn <IAM-Policy ARN> --approve