AWS S3 入门¶
有关配置 Amazon S3 的详细指南,请参阅 AWS 官方文档:创建您的第一个存储桶。
使用访问密钥设置 AWS S3 的最佳实践¶
使用 AWS S3 的最佳实践取决于您的具体用例。如果您想在 AWS S3 上试用 ArcticDB,下面概述了一种简单有效的方法。
1. 为访问 S3 存储桶创建策略¶
- 导航到 IAM -> 策略 -> 创建策略。
- 选择 S3 作为服务,并选择以下访问级别权限
权限 | 描述 |
---|---|
s3:GetObject |
读取对象 |
s3:PutObject |
写入对象 |
s3:DeleteObject |
删除对象 |
s3:ListBucket |
列出存储桶内容 |
- 指定此策略将允许访问的 S3 存储桶。
- 点击 下一步,查看并为策略命名,使其具有实际意义。
- 点击 创建策略。
2. 创建 IAM 用户¶
在 AWS 中,最佳实践是使用非 root IAM 账户管理和访问 S3 存储桶。出于试用目的,建议专门创建一个 IAM 账户用于测试 ArcticDB。
按照以下步骤创建 IAM 用户
- 导航到 IAM > 用户。
- 点击 添加用户。
- 选择一个用户名,例如
arcticdbtrial
,然后点击 下一步。 - 选择 直接附加策略,并将 步骤 1 中创建的策略附加到该用户。
- 点击 下一步 进行查看。
- 点击 创建用户。
3. 创建访问密钥¶
- 导航到 IAM > 用户 表格,然后点击新创建的用户。
- 转到 安全凭证 选项卡,找到 访问密钥 部分。
- 点击 创建访问密钥。
- 选择 本地代码 选项 (ArcticDB 是本地代码)。
- 勾选 我理解... 的复选框,然后点击 下一步。
- 点击 创建访问密钥。
- 安全地记录 访问密钥 和 秘密访问密钥,因为关闭此屏幕后它们将不会再次显示。
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. 前提条件:¶
- 将脚本中的
<BUCKET_NAME>
替换为您的存储桶名称。 - 安装 boto3。
- 使用
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 存储桶创建策略¶
- 导航到 IAM -> 策略 -> 创建策略。
- 选择 S3 作为服务,并选择以下访问级别权限
权限 | 描述 |
---|---|
s3:GetObject |
读取对象 |
s3:PutObject |
写入对象 |
s3:DeleteObject |
删除对象 |
s3:ListBucket |
列出存储桶内容 |
- 指定此策略将允许访问的 S3 存储桶。
- 点击 下一步,查看并为策略命名,使其具有实际意义。
- 点击 创建策略。
2. 创建访问 S3 存储桶的角色¶
- 导航到 IAM -> 角色 -> 创建角色。
- 为您的用例选择适当的 信任实体类型。
- 在权限步骤中,附加上一步中创建的策略。
- 为角色命名,使其具有实际意义,然后点击 创建角色。
- 复制 角色 ARN 以在下一步中使用。
3. 创建使用 STS 扮演角色的策略¶
- 导航到 IAM -> 策略 -> 创建策略。
- 选择 STS 作为服务,并授予 AssumeRole 权限。
- 指定上一步中创建的 角色 ARN。
- 为策略命名,然后点击 创建策略。
4. 创建 IAM 用户(可选)并附加 STS 策略¶
在许多情况下,无需专门的 IAM 用户,因为这通常由组织的 IT 服务管理。但是,如果需要,请按照以下步骤为您的服务(例如 ArcticDB)创建 IAM 用户。
- 导航到 IAM -> 用户 -> 创建用户。
- 输入用户名,然后继续下一步。
- 选择 直接附加策略 选项,并附加步骤 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_arn
和source_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 端点可从您的环境访问。
网络连接中断可能会触发此类错误。请注意,此错误将在多次尝试重新建立连接后出现。