Amazon s3 用于跨帐户访问的Helm s3插件

Amazon s3 用于跨帐户访问的Helm s3插件,amazon-s3,amazon-iam,kubernetes-helm,Amazon S3,Amazon Iam,Kubernetes Helm,我使用s3作为掌舵图存储库。我想从不同AWS帐户中的两个独立ec2实例访问/管理此图表。两者都有不同的角色 我使用下面的命令在AWS帐户a中创建一个bucket aws s3api create-bucket --bucket test15-helm-bucket --region "eu-central-1" --create-bucket-configuration LocationConstraint=eu-central-1 使用以下命令初始化舵图回购 helm s3 init s3:

我使用s3作为掌舵图存储库。我想从不同AWS帐户中的两个独立ec2实例访问/管理此图表。两者都有不同的角色

我使用下面的命令在AWS帐户a中创建一个bucket

aws s3api create-bucket --bucket test15-helm-bucket --region "eu-central-1" --create-bucket-configuration LocationConstraint=eu-central-1
使用以下命令初始化舵图回购

helm s3 init s3://test15-helm-bucket/charts
Initialized empty repository at s3://test15-helm-bucket/charts
获取拥有该对象的帐户的规范ID

aws s3api list-objects --bucket test15-helm-bucket --prefix charts
{
    "Contents": [
        {
            "ETag": "\"xxxxxxxxxxxxxx\"",
            "LastModified": "xxxxxxxxxxxxxx",
            "StorageClass": "STANDARD",
            "Size": 69,
            "Owner": {
                "ID": "ee70xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
            },
            "Key": "charts/index.yaml"
        }
    ]
}
增加了如下的舵手回购

helm repo add testing s3://test15-helm-bucket/charts
"testing" has been added to your repositories 
现在从Account B ec2实例开始,我配置了跨帐户角色以承担附加到Account A ec2实例的角色

.即

然后配置下面的环境变量

export AWS_PROFILE=helm
我运行下面的命令从AWS帐户B中的计算机获取帐户的规范ID,并获得帐户A的规范ID的预期结果

aws s3api list-buckets --query Owner.ID
但是,在这台机器上添加repo的helm命令失败

helm repo add testing s3://test15-helm-bucket/charts
fetch from s3: fetch object from s3: AccessDenied: Access Denied
        status code: 403, request id: xxxxxxxxx, host id: xxxxxxxxxxxxxxxxxxxxxxxxxxx
Error: Looks like "s3://test15-helm-bucket/charts" is not a valid chart repository or cannot be reached: plugin "bin/helms3" exited with error
看起来helm s3插件无法在帐户A中扮演角色。但是AWS命令可以


我怎样才能解决这个问题

错误消息仅表示读取访问被拒绝,但是您的API命令仅显示您已授予对bucket的列表访问权限。在没有看到随附的政策之前,无法对该问题进行进一步评论

但是,您也可以尝试配置跨帐户bucket访问,并跳过在实例上配置CLI配置文件

  • 将bucket策略附加到您的bucket,以允许访问其他帐户中的角色(EC2)
  • {
    “版本”:“2012-10-17”,
    “声明”:[
    {
    “效果”:“允许”,
    “委托人”:{
    “AWS”:“arn:AWS:iam:::角色/”
    },
    “行动”:[
    “s3:GetObject”,
    “s3:PutObject”,
    “s3:PutObjectAcl”
    ],
    “资源”:[
    “arn:aws:s3::/*”
    ]
    }
    ]
    }
    
  • 将策略附加到Account-B中EC2实例的IAM角色,以访问Account-a中的bucket
  • {
    “版本”:“2012-10-17”,
    “声明”:[
    {
    “效果”:“允许”,
    “行动”:[
    “s3:GetObject”,
    “s3:PutObject”,
    “s3:PutObjectAcl”
    ],
    “资源”:“arn:aws:s3::/*”
    }
    ]
    }
    
    您现在应该能够从Account-B读取/写入bucket

    aws s3 cp s3://<bucket>/<anobject> .
    
    aws s3 cp s3://。
    
    错误消息仅表示读取访问被拒绝,但您的API命令仅显示您已授予对bucket的列表访问权限。在没有看到随附的政策之前,无法对该问题进行进一步评论

    但是,您也可以尝试配置跨帐户bucket访问,并跳过在实例上配置CLI配置文件

  • 将bucket策略附加到您的bucket,以允许访问其他帐户中的角色(EC2)
  • {
    “版本”:“2012-10-17”,
    “声明”:[
    {
    “效果”:“允许”,
    “委托人”:{
    “AWS”:“arn:AWS:iam:::角色/”
    },
    “行动”:[
    “s3:GetObject”,
    “s3:PutObject”,
    “s3:PutObjectAcl”
    ],
    “资源”:[
    “arn:aws:s3::/*”
    ]
    }
    ]
    }
    
  • 将策略附加到Account-B中EC2实例的IAM角色,以访问Account-a中的bucket
  • {
    “版本”:“2012-10-17”,
    “声明”:[
    {
    “效果”:“允许”,
    “行动”:[
    “s3:GetObject”,
    “s3:PutObject”,
    “s3:PutObjectAcl”
    ],
    “资源”:“arn:aws:s3::/*”
    }
    ]
    }
    
    您现在应该能够从Account-B读取/写入bucket

    aws s3 cp s3://<bucket>/<anobject> .
    
    aws s3 cp s3://。
    
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": "arn:aws:s3:::<AccountABucketName>/*"
    
            }
        ]
    }
    
    aws s3 cp s3://<bucket>/<anobject> .