Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 EKS Pod S3访问被拒绝_Amazon S3_Amazon Eks_Mlflow - Fatal编程技术网

Amazon s3 EKS Pod S3访问被拒绝

Amazon s3 EKS Pod S3访问被拒绝,amazon-s3,amazon-eks,mlflow,Amazon S3,Amazon Eks,Mlflow,我正在尝试创建一个EKS吊舱,用作mlflow的服务。但我遇到的问题是,我无法连接到s3来存储mlflow运行工件。我已经尝试使用kubectl exec-it-/bin/bash连接到pod,并在那里设置aws凭据。在执行此操作时,我能够将s3存储桶初始化 但是,当我尝试将mlflow工件保存到同一s3位置时,会出现以下错误: An error occurred (AccessDenied) when calling the AssumeRoleWithWebIdentity operatio

我正在尝试创建一个EKS吊舱,用作mlflow的服务。但我遇到的问题是,我无法连接到s3来存储mlflow运行工件。我已经尝试使用kubectl exec-it-/bin/bash连接到pod,并在那里设置aws凭据。在执行此操作时,我能够将s3存储桶初始化

但是,当我尝试将mlflow工件保存到同一s3位置时,会出现以下错误:

An error occurred (AccessDenied) when calling the AssumeRoleWithWebIdentity operation: Not authorized to perform sts:AssumeRoleWithWebIdentity

什么问题会导致这种情况?是否有一个IAM需要设置EKS吊舱或类似的装置?

是。在pod上运行的代码需要具有正确的IAM权限才能访问S3并执行所需的API调用

有多种方法可以实现这一点

选项1:将IAM策略附加到节点角色 EKS节点实际上是EC2实例,因此您可以将适当的IAM策略附加到节点所属的IAM角色。如果您正在使用,则不是这样。在这种情况下,见备选方案3。这种方法的缺点是,它将这些权限授予在该节点上运行的所有pod。如果需要更精细的控制,请参见选项2

如果您已使用设置集群,那么这相当简单

本例获取集群中每个节点组的IAM角色名称,然后将AmazonS3FullAccess托管策略附加到每个节点组

!/bin/bash 对于$eksctl中的STACK_NAME,获取nodegroup-cluster$cluster_NAME-o json | jq-r'.[].StackName' 做 ROLE|u NAME=$aws cloudformation描述堆栈资源-堆栈名称$stack|u NAME | jq-r'.StackResources[]| select.ResourceType==aws::IAM::ROLE |.PhysicalResourceId' aws iam附加角色策略\ -角色名称$角色名称\ -策略arn arn:aws:iam::aws:policy/AmazonS3FullAccess 完成 然后,该策略将应用于在该节点组中创建的所有节点。请注意,如果存在多个节点组,则需要为每个节点组执行此操作

选项2:将IAM角色分配给服务帐户 一个不那么严厉但更复杂的选择是。这允许您隔离不同POD的权限

此选项稍微复杂一些,因为它涉及在集群上创建OIDC标识提供程序

选项3:仅AWS Fargate吊舱执行角色
如果您正在使用来运行播客,那么您应该能够为您的播客添加权限。

是。在pod上运行的代码需要具有正确的IAM权限才能访问S3并执行所需的API调用

有多种方法可以实现这一点

选项1:将IAM策略附加到节点角色 EKS节点实际上是EC2实例,因此您可以将适当的IAM策略附加到节点所属的IAM角色。如果您正在使用,则不是这样。在这种情况下,见备选方案3。这种方法的缺点是,它将这些权限授予在该节点上运行的所有pod。如果需要更精细的控制,请参见选项2

如果您已使用设置集群,那么这相当简单

本例获取集群中每个节点组的IAM角色名称,然后将AmazonS3FullAccess托管策略附加到每个节点组

!/bin/bash 对于$eksctl中的STACK_NAME,获取nodegroup-cluster$cluster_NAME-o json | jq-r'.[].StackName' 做 ROLE|u NAME=$aws cloudformation描述堆栈资源-堆栈名称$stack|u NAME | jq-r'.StackResources[]| select.ResourceType==aws::IAM::ROLE |.PhysicalResourceId' aws iam附加角色策略\ -角色名称$角色名称\ -策略arn arn:aws:iam::aws:policy/AmazonS3FullAccess 完成 然后,该策略将应用于在该节点组中创建的所有节点。请注意,如果存在多个节点组,则需要为每个节点组执行此操作

选项2:将IAM角色分配给服务帐户 一个不那么严厉但更复杂的选择是。这允许您隔离不同POD的权限

此选项稍微复杂一些,因为它涉及在集群上创建OIDC标识提供程序

选项3:仅AWS Fargate吊舱执行角色 如果您正在使用来运行播客,那么您应该能够向应用程序添加权限