JMV*_*V12 2 amazon-s3 amazon-iam amazon-eks mlflow
我正在尝试创建一个 EKS pod 来用作 mlflow 的服务。我遇到的问题是我无法连接到 s3 来存储 mlflow 运行工件。kubectl exec -it <pod_name> -- /bin/bash我也尝试使用并设置 aws 凭证连接到 pod 。执行此操作时,我可以 ls s3 存储桶。
但是,当我尝试将 mlflow 工件保存到同一 s3 位置时,出现以下错误:
An error occurred (AccessDenied) when calling the AssumeRoleWithWebIdentity operation: Not authorized to perform sts:AssumeRoleWithWebIdentity
Run Code Online (Sandbox Code Playgroud)
造成这种情况的问题是什么?是否需要使用 EKS pod 或类似的东西设置 IAM?
Apo*_*ian 10
是的。在 Pod 上运行的代码需要具有正确的 IAM 权限才能访问 S3 并执行您需要的 API 调用。
有多种方法可以实现这一目标。
EKS 节点实际上是 EC2 实例,因此您可以将正确的 IAM 策略附加到您的节点所属的 IAM 角色。如果您使用的是AWS Fargate,则情况并非如此。在这种情况下,请参阅选项 3。此方法的缺点是它将这些权限授予在该节点上运行的所有 pod。如果您想要更精细的控制,请参阅选项 2。
如果您已经使用 来设置集群eksctl,那么这相当简单。
此示例获取集群中每个节点组的 IAM 角色名称,然后将AmazonS3FullAccess托管策略附加到每个节点组。
#!/bin/bash
for STACK_NAME in $(eksctl get nodegroup --cluster $CLUSTER_NAME -o json | jq -r '.[].StackName')
do
ROLE_NAME=$(aws cloudformation describe-stack-resources --stack-name $STACK_NAME | jq -r '.StackResources[] | select(.ResourceType=="AWS::IAM::Role") | .PhysicalResourceId')
aws iam attach-role-policy \
--role-name $ROLE_NAME \
--policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
done
Run Code Online (Sandbox Code Playgroud)
然后该策略将应用于该节点组中创建的所有节点。请注意,如果有多个节点组,则需要对每个节点组执行此操作。
一种不那么严厉(但更复杂)的替代方案是将 IAM 角色分配给服务帐户。这允许您隔离不同 Pod 的权限。
此选项稍微复杂一些,因为它涉及在集群上创建 OIDC 身份提供商。
如果您使用AWS Fargate运行您的 Pod,那么您应该能够向您的Pod 执行角色添加权限。
| 归档时间: |
|
| 查看次数: |
11710 次 |
| 最近记录: |