我无法从我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例访问我的 Amazon Simple Storage Service (Amazon S3) 存储桶。如何从 EC2 实例激活对 S3 存储桶的读/写访问?
简短描述
要从 EC2 实例连接到 S3 存储桶,您必须:
1. 创建一个AWS Identity and Access Management(IAM)配置文件角色,以授予对 Amazon S3 的访问权限。
2. 将该 IAM 实例配置文件附加到实例。
3. 验证您 S3 存储桶的权限。
4. 验证从 EC2 实例到 Amazon S3 的网络连接
5. 验证对 S3 存储桶的访问。
解决方法
创建一个IAM实例配置文件以授予对Amazon S3的访问权限
1. 打开 IAM 控制台。
2. 选择角色,然后选择创建角色。
3. 选择 AWS Service(AWS 服务),然后选择 Use Case(使用案例)下的 EC2。
**注意:**从控制台创建一个 IAM 角色,并选中 EC2 作为受信任实体,会自动创建一个与角色名称相同的 IAM 实例配置文件。但是,如果使用 AWS Command Line Interface (AWS CLI) 或通过 API 创建角色,则不会自动创建实例配置文件。有关更多信息,请参阅我创建了一个 IAM 角色,但我启动实例时此角色并未显示在下拉列表中。我该怎么办?
4. 选中下一步:权限。
5. 创建一个自定义策略,以提供访问 S3 存储桶所需的最低权限。有关创建自定义策略的说明,请参阅编写 IAM 策略:如何授予对 Amazon S3 存储桶的访问权限和 Amazon S3 中的身份和访问权限管理。
**注意:**创建具有所需最低权限的策略是安全最佳实践。但是,要允许 EC2 访问您的所有 Amazon S3 存储桶,您可以使用 AmazonS3ReadOnlyAccess 或 AmazonS3FullAccess 托管 IAM policy。
6. 选中 下一步: 标签, 然后选中下一步: 检查。
7. 输入 Role name(角色名称),然后选中 Create role(创建角色)。
将该IAM实例角色附加到 EC2 实例
1. 打开 Amazon EC2 控制台。
2. 选择 Instances。
3. 选中 IAM 角色要附加到的目标实例。
4. 依次选择 Actions(选项卡)、Security(安全)和 Modify IAM role(修改 IAM 角色)。
5. 选中您刚刚创建的 IAM 角色,然后选择 Save(保存)。该 IAM 角色现已分配至您的 EC2 实例。
验证您 S3 存储桶的权限
1. 打开 Amazon S3 控制台。
2. 选中要验证策略的 S3 存储桶。
3. 选择 Permissions选项卡。
4. 选择存储桶策略。
5. 搜索包含 "Effect: "Deny" 的语句。
6. 在您的存储桶策略中,编辑或删除任何拒绝 IAM 实例配置文件访问您的存储桶的 Effect: Deny 语句。要了解有关编辑策略的说明,请参阅编辑 IAM 策略。
验证从 EC2 实例到 Amazon S3 的网络连接
要使您的 EC2 实例连接到 S3 端点,该实例必须为以下之一:
- EC2 实例具有公共 IP 地址和默认路由指向互联网网关的路由表条目
- 具有通过 NAT 网关的默认路由的私有 EC2 实例
- 使用网关 VPC 端点连接到 Amazon S3 的私有 EC2 实例
要排除私有 EC2 实例与 S3 存储桶之间的连接问题,请参阅为什么我无法使用网关 VPC 端点连接到 S3 存储桶?
验证对 S3 存储桶的访问
1. 在您的 EC2 实例上安装 AWS CLI。
**注意:**如果在运行 AWS CLI 命令时收到错误信息,请确保您使用的是最新版本的 AWS CLI。
2. 通过运行以下命令来验证对您的 S3 存储桶的访问。请将 DOC-EXAMPLE-BUCKET 替换为您的 S3 存储桶的名称。
aws s3 ls s3://DOC-EXAMPLE-BUCKET
**注意:**使用 AWS Key Management Service (AWS KMS) 密钥加密的 S3 对象必须通过以下方式授予了 kms: Decrypt 权限:
如果未授予这些权限,则无法复制或下载 S3 对象。更多信息,请参阅从 Amazon S3 下载已使用 KMS 加密的对象时是否需要指定 AWS KMS 密钥?
相关信息
为什么我无法使用网关 VPC 终端节点连接到 S3 存储桶?