跳到内容

AWS S3 入门

有关配置 Amazon S3 的详细指南,请参阅 AWS 官方文档:创建您的第一个存储桶

使用访问密钥设置 AWS S3 的最佳实践

使用 AWS S3 的最佳实践取决于您的具体用例。如果您想在 AWS S3 上试用 ArcticDB,下面概述了一种简单有效的方法。

1. 为访问 S3 存储桶创建策略

  1. 导航到 IAM -> 策略 -> 创建策略
  2. 选择 S3 作为服务,并选择以下访问级别权限
权限 描述
s3:GetObject 读取对象
s3:PutObject 写入对象
s3:DeleteObject 删除对象
s3:ListBucket 列出存储桶内容
  1. 指定此策略将允许访问的 S3 存储桶。

Create Policy Screen 1

  1. 点击 下一步,查看并为策略命名,使其具有实际意义。

Create Policy Screen 2

  1. 点击 创建策略

2. 创建 IAM 用户

在 AWS 中,最佳实践是使用非 root IAM 账户管理和访问 S3 存储桶。出于试用目的,建议专门创建一个 IAM 账户用于测试 ArcticDB。

按照以下步骤创建 IAM 用户

  1. 导航到 IAM > 用户
  2. 点击 添加用户
  3. 选择一个用户名,例如 arcticdbtrial,然后点击 下一步
  4. 选择 直接附加策略,并将 步骤 1 中创建的策略附加到该用户。
  5. 点击 下一步 进行查看。
  6. 点击 创建用户

3. 创建访问密钥

  1. 导航到 IAM > 用户 表格,然后点击新创建的用户。
  2. 转到 安全凭证 选项卡,找到 访问密钥 部分。
  3. 点击 创建访问密钥
  4. 选择 本地代码 选项 (ArcticDB 是本地代码)。
  5. 勾选 我理解... 的复选框,然后点击 下一步
  6. 点击 创建访问密钥
  7. 安全地记录 访问密钥秘密访问密钥,因为关闭此屏幕后它们将不会再次显示。

4. 创建存储桶

其余步骤可以在您的客户端机器上使用命令执行。

步骤 1:安装 AWS CLI

如果尚未安装 AWS 命令行界面 (CLI),请按照 官方 AWS CLI 安装指南 进行操作。

步骤 2:配置 AWS CLI

使用 AWS CLI 配置您的客户端机器,提供之前创建的 访问密钥秘密访问密钥。您还需要选择一个 AWS 区域。为获得最佳性能,请选择靠近您的 ArcticDB 客户端的区域。

运行以下命令并提供所需详细信息

$ aws configure
AWS Access Key ID [None]: <ACCESS_KEY>
AWS Secret Access Key [None]: <SECRET_KEY>
Default region name [None]: <REGION>
Default output format [None]:

存储桶名称必须全局唯一,因此您需要创建自己的唯一名称。使用以下命令创建存储桶

$ aws s3 mb s3://<BUCKET_NAME>


5. 连接到存储桶

  • 安装 ArcticDB.
  • 使用您的 <REGION><BUCKET_NAME>
  • 如上所述,使用 aws configure 设置 ~/.aws/credentials
    import arcticdb as adb
    arctic = adb.Arctic('s3://s3.<REGION>.amazonaws.com:<BUCKET_NAME>?aws_auth=true')
    

6. 检查与 S3 存储桶的连接 - 故障排除

1. 权限

ArcticDB 依赖以下五个 S3 方法进行操作

方法 所需权限
GetObject s3:GetObject
HeadObject s3:GetObject
PutObject s3:PutObject
DeleteObject s3:DeleteObject
ListObjectsV2 s3:ListBucket

2. 验证脚本

您可以使用以下脚本从您的客户端机器验证与 S3 存储桶的连接。如果脚本成功执行,则配置应该适用于 ArcticDB 的读写操作。

3. 前提条件:

  1. 将脚本中的 <BUCKET_NAME> 替换为您的存储桶名称。
  2. 安装 boto3
  3. 使用 aws configure 命令(如前所述)在 ~/.aws/credentials 中设置您的 AWS 凭证。

4. Python 脚本:

import io
import boto3

# Initialize the S3 client
s3 = boto3.client('s3')

# Replace '<BUCKET_NAME>' with your actual bucket name
bucket = '<BUCKET_NAME>'

# Perform operations to check connectivity
s3.put_object(Bucket=bucket, Key='_arctic_check/check.txt', Body=io.BytesIO(b'check file contents'))
s3.list_objects_v2(Bucket=bucket, Prefix='_arctic_check/')
s3.head_object(Bucket=bucket, Key='_arctic_check/check.txt')
s3.get_object(Bucket=bucket, Key='_arctic_check/check.txt')
s3.delete_object(Bucket=bucket, Key='_arctic_check/check.txt')

5. 注意:

此脚本写入的检查对象 (_arctic_check/check.txt) 是临时的,不会干扰 ArcticDB 在存储桶上的正常操作。如果任何操作失败,请验证分配给您的 IAM 角色或用户的权限,并确保存储桶已正确配置。

使用 STS 设置 AWS S3 的最佳实践

AWS Security Token Service (STS) 允许用户扮演特定角色以临时访问 AWS 资源。本指南详细介绍了设置 STS 以访问 Amazon S3 存储桶所需的步骤。

STS 设置入门

1. 为访问 S3 存储桶创建策略

  1. 导航到 IAM -> 策略 -> 创建策略
  2. 选择 S3 作为服务,并选择以下访问级别权限
权限 描述
s3:GetObject 读取对象
s3:PutObject 写入对象
s3:DeleteObject 删除对象
s3:ListBucket 列出存储桶内容
  1. 指定此策略将允许访问的 S3 存储桶。

Create Policy Screen 1

  1. 点击 下一步,查看并为策略命名,使其具有实际意义。

Create Policy Screen 2

  1. 点击 创建策略

2. 创建访问 S3 存储桶的角色

  1. 导航到 IAM -> 角色 -> 创建角色
  2. 为您的用例选择适当的 信任实体类型

Create Role Screen 1

  1. 在权限步骤中,附加上一步中创建的策略。

Create Role Screen 2

  1. 为角色命名,使其具有实际意义,然后点击 创建角色
  2. 复制 角色 ARN 以在下一步中使用。

3. 创建使用 STS 扮演角色的策略

  1. 导航到 IAM -> 策略 -> 创建策略
  2. 选择 STS 作为服务,并授予 AssumeRole 权限。
  3. 指定上一步中创建的 角色 ARN

Create Policy Screen 3

  1. 为策略命名,然后点击 创建策略

4. 创建 IAM 用户(可选)并附加 STS 策略

在许多情况下,无需专门的 IAM 用户,因为这通常由组织的 IT 服务管理。但是,如果需要,请按照以下步骤为您的服务(例如 ArcticDB)创建 IAM 用户。

  1. 导航到 IAM -> 用户 -> 创建用户
  2. 输入用户名,然后继续下一步。

Create User Screen 1

  1. 选择 直接附加策略 选项,并附加步骤 3 中创建的策略。

Create User Screen 2

  1. 点击 创建用户
  2. 创建用户后,导航到该用户的 安全凭证 选项卡并创建 访问密钥
  3. 立即复制 访问密钥秘密访问密钥,因为它们将不再显示。

5. 配置 ArcticDB 客户端以访问 AWS 并扮演角色

要在 ArcticDB 中使用此设置,请在 AWS 共享的 config 文件中配置凭证。

文件位置:

平台 文件位置
Linux 和 macOS ~/.aws/config
Windows %USERPROFILE%\.aws\config

配置示例:

[profile PROFILE]
role_arn = ROLE_ARN_TO_BE_ASSUMED
source_profile = BASE_PROFILE

[profile BASE_PROFILE]
aws_access_key_id = YOUR_ACCESS_KEY_ID
aws_secret_access_key = YOUR_SECRET_ACCESS_KEY

在 ArcticDB 中使用此配置

>>> import arcticdb as adb
>>> arctic = adb.Arctic('s3://s3.REGION.amazonaws.com:BUCKET?aws_auth=sts&aws_profile=PROFILE')

有关更深入的文档,请参阅官方网站


使用 STS 时的常见错误 - 故障排除

在 ArcticDB 中使用 STS 时,可能会出现以下常见错误。这些错误通常由 AWS C++ SDK 问题、不正确的 IAM 账户设置或文件配置错误引起。要启用附加日志记录,请参阅本指南


1. AWS C++ SDK 中的断言错误

如果 ArcticDB 通过扮演角色未能获取临时令牌,您可能会遇到如下断言错误

virtual void Aws::Auth::STSProfileCredentialsProvider::Reload(): Assertion `!profileIt->second.GetCredentials().IsEmpty()' failed.

原因:

此错误通常由以下原因引起: - IAM 账户设置不正确。 - AWS 凭证文件无效或配置错误。

解决方案:

  • 验证 IAM 角色 ARN 是否正确。
  • 确保 AWS 凭证文件(~/.aws/config%USERPROFILE%\.aws\config)正确配置了正确的角色和基本配置文件。

2. 权限错误

您可能会遇到如下权限错误

arcticdb_ext.exceptions.PermissionException: E_PERMISSION Permission error: S3Error#15 AccessDenied: Access Denied for object '_arctic_cfg/cref/'

原因 #1:

此错误表明配置文件存在问题。具体来说: - AWS 配置文件中的 角色 ARN基本配置文件 不正确。

解决方案:

  • 仔细检查 AWS 配置文件中的 role_arnsource_profile 值。
  • 确保 IAM 角色具有访问所需 S3 存储桶和对象的必要权限。

原因 #2:

AWS C++ SDK 中的一个已知问题

受影响的用户

  • 使用 STS 身份验证,并且
  • 使用以下操作系统
  • 使用自定义 CA 证书的 RHEL 发行版
  • 其他 Linux 发行版

解决方法

您需要为您正在使用的 CA 证书创建到必需的 /etc/pki/tls/certs 目录的符号链接。以下是 Ubuntu 上默认 CA 证书的创建示例

ln -s /usr/lib/ssl/cert.pem /etc/pki
ln -s /usr/lib/ssl/certs /etc/pki/tls/certs
ln -s /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt

3. 可重试存储错误

如果存在网络连接问题,您可能会看到以下错误

arcticdb_ext.exceptions.StorageException: E_S3_RETRYABLE Retry-able error: S3Error#99 : Encountered network error when sending http request for object '_arctic_cfg/cref/'

原因:

此错误发生在以下情况: - 在 S3 操作期间网络连接中断。 - ArcticDB 在多次重试尝试后无法重新建立连接。

解决方案:

  • 验证您的网络连接。
  • 确保 S3 端点可从您的环境访问。

网络连接中断可能会触发此类错误。请注意,此错误将在多次尝试重新建立连接后出现。