我用 STS 设置了 kubernetes,它适用于 sdk 的 sqs、sns 等。我需要使用 STS auth 和fog-aws gem 来下载/列出文件,我可以使用 ruby aws-sdk-s3 来完成,但我使用carrierwave gem 所以我想用fog-aws来解决这个问题。
使用 sdk - 工作
s3 = Aws::S3::Client.new
resp = s3.list_objects(bucket:'sts-s3-test')
<Lists objects successfully>
使用fog-aws - 失败
s3 = Fog::Storage.new(provider: 'AWS', region: 'us-west-2',use_iam_profile: true)
directory = s3.directories.get('sts-s3-test')
Excon::Error::Forbidden (Expected(200) <=> Actual(403 Forbidden))
<Error><Code>AccessDenied</Code>
感谢任何指针,谢谢。
编辑:
STS 由我们在 kuberenets 中的 DevOps 使用服务帐户https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/配置。我不知道内部结构及其工作原理,但是通过此设置,新的 aws sdk 可以读取帐户详细信息并自动承担角色,无需显式调用承担角色功能。我们可以从我的第一个示例中看到这一点,该示例列出了我不传递任何凭据的 s3 对象。链接到使用来自 pod 的服务帐户的 aws sdk 新版本。 https://aws.amazon.com/blogs/opensource/introducing-fine-grained-iam-roles-service-accounts/
我已经尝试过获取临时访问密钥和秘密并将其传递给存储类的方法,但这也不起作用。我们的 DevOps 人员说所有使用密钥和秘密的访问都被禁用,唯一的使用方法是使用假设角色和网络身份
我还发现了我认为可以解决我遇到的问题的要点,我还没有尝试过。参考链接https://gist.github.com/peterwells/39a5c31d934fa8eb0f2c