【问题标题】:Access S3 from AWS EC2 from AWS SDK without Access Id and secret Key从 AWS SDK 从 AWS EC2 访问 S3,无需访问 ID 和密钥
【发布时间】:2019-04-22 17:34:39
【问题描述】:

AWS-EC2实例运行的AWS-SDK如何访问AWS-S3存储桶?

  1. AWS-EC2 策略设置为可以访问 S3 没有 accessId 和密钥的存储桶
  2. Aws-cli 工具能够从 EC2 实例访问 S3 存储桶,而无需任何 accessId 和密钥
  3. 如果 aws-cli 工具能够在没有 accessId 和 secret 密钥的情况下访问 S3,则 AWS-SDK 在运行时也必须有办法做到这一点 来自 EC2 实例。

如何做到这一点?

【问题讨论】:

  • 创建 IAM 实例配置文件并将其与 EC2 实例关联。
  • 创建 IAM 配置文件还需要配置 accessId 和密钥以从 AWS-SDK 访问 S3 存储桶。
  • 如果您有 IAM 配置文件,则不需要访问 ID 和密钥。只需运行命令aws s3 copy ...
  • 是的,我知道这一点。使用 aws-cli 工具,我可以执行诸如“aws s3 copy...”之类的命令。但我需要的是,使用 AWS-SDK 做同样的事情。我想使用 JAVA 程序或 python 程序访问 S3 存储桶。适用于 java 的 AWS-SDK 需要密钥和访问 ID。但是我如何通过程序在没有 accessid 和密钥的情况下访问它?
  • 如果您已将 IAM 角色分配给 EC2 实例,则任何使用 AWS 开发工具包的程序都会自动查找凭证。无需提供访问密钥 + 密钥。 (顺便说一下,AWS CLI 只是一个 Python 程序,它通过 AWS SDK for Python 获取凭证。)

标签: amazon-web-services amazon-s3 amazon-ec2 aws-sdk


【解决方案1】:

使用AmazonS3ClientBuilder.defaultClient() 创建您的客户端。这使用链接中提到的DefaultAWSCredentialsProviderChain

在此中查找凭证的 AWS 凭证提供程序链 顺序:

  • 环境变量 - AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY(推荐,因为它们被所有 AWS 开发工具包和 CLI 识别
    .NET 除外)或 AWS_ACCESS_KEY 和 AWS_SECRET_KEY(仅限
    Java SDK 识别)
  • Java 系统属性 - aws.accessKeyId 和 aws.secretKey
  • 所有 AWS 开发工具包和 AWS CLI 共享的默认位置 (~/.aws/credentials) 中的凭证配置文件
  • 如果设置了 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 环境变量,则通过 Amazon EC2 容器服务交付的凭证
    并且安全管理员有权访问该变量,
  • 通过 Amazon EC2 元数据服务交付的实例配置文件凭证

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 2020-04-10
    • 2016-03-07
    • 1970-01-01
    相关资源
    最近更新 更多