一、Amazon S3 API 访问 RADOS Gateway
Amazon S3接口将对象存储在其中的名称空间定义为bucket。
为了使用S3 API访问和管理对象和桶,应用程序使用 RADOS Gateway 用户 进行身份验证。
每个用户都有一个标识用户的访问密钥和一个对用户进行身份验证的密钥。
1、为 Amazon S3 API 创建用户
使用radosgw-admin user create命令在Ceph的RADOS Gateway中创建一个新用户,该用户拥有一个唯一的UID、显示名称、电子邮件地址以及一对用于API访问的密钥(Access Key和Secret Key)。这些信息通常用于配置客户端应用程序,使其能够通过S3 API与RGW交互。
-
命令:radosgw-admin user create --uid=<唯一标识符> --display-name="用户的显示名称" --email=<邮箱> --access-key=<用户的访问密钥> --secret=<与访问密钥相对应的私密密钥>
[ceph: root@node /]# radosgw-admin user create --uid=testuser \
--display-name="Test User" \
--email=test@example.com \
--access-key=12345 \
--secret=67890
这个命令中的参数含义如下:
- radosgw-admin:这是RADOS Gateway的管理工具,用于执行各种管理操作。
- user create:这个子命令用于创建一个新的用户。
- --uid=testuser:指定新用户的唯一标识符,这里设置为 testuser。
- --display-name="Test User":指定用户的显示名称,这里设置为 "Test User"。
- --email=test@example.com:指定用户的电子邮件地址,这里设置为 test@example.com。
- --access-key=12345:设置用户的访问密钥,这是用于认证的公钥,这里设置为 12345。
- --secret=67890:设置与访问密钥相对应的私密密钥,这里设置为 67890。
如果未指定接入密钥和保密密钥,radosgw-admin命令将自动生成密钥并显示在输出信息中。
[ceph: root@node /]# radosgw-admin user create --uid=s3user --display-name="Amazon S3 API user"
... ...
"keys": [
{
"user": "s3user",
"access_key": "8PI2D9ARWNGJI99K8TOS",
"secret_key": "brKaQdhyR022znVVVdDLuAEafRjbrAorr0GoXN1"
}
... ...
重要:radosgw-admin自动生成的key可能包含\符号,客户端可能无法正确使用该字符,需要重新生成key或者手动设置key解决该问题。
查看已有用户的 access_key 和 secret_key,可以使用 radosgw-admin 工具的 user info 命令。请按照以下步骤操作:
-
命令:radosgw-admin user info --uid=<user-id>
将 <user-id> 替换为你想要查看密钥的用户ID。命令执行后,你会看到一个 JSON 格式的输出,其中包含用户的详细信息,包括 access_key 和 secret_key。查找 keys 字段,这里会列出每一对 access_key 和 secret_key。
例如:
<JSON>{
"user_id": "example-user",
"display_name": "Example User",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [],
"keys": [
{
"user": "example-user",
"access_key": "XXXXXXXXXXXXXXXXXXXX",
"secret_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
],
// 其他信息
}
2、管理 RGW 用户
1)重新生成现有用户的私密密钥
使用radosgw-admin key create命令和--gen-secret选项,该命令是用于在RGW中为一个已存在的用户创建或者添加一个新的密钥
-
命令:radosgw-admin key create --uid=<用户的唯一标识符> --access-key=<设置访问密钥> --gen-secret
[ceph: root@node /]# radosgw-admin key create --uid=s3user --access-key="8PI2D9ARWNGJI99K8TOS" --gen-secret
命令参数的具体含义如下:为指定的UID(在这个例子中是 s3user)创建一对新的访问密钥和密钥。这对密钥可以被用来通过S3兼容的API与Ceph的RADOS Gateway进行安全的交互。
- radosgw-admin: 这是RADOS Gateway的命令行管理工具。
- key create: 这个子命令指示 radosgw-admin 创建一个新的密钥。
- --uid=s3user: 这指定了用户的唯一标识符(UID),在这个例子中是 s3user。这个UID应该对应于RGW中一个已存在的用户。
- --access-key="8PI2D9ARWNGJI99K8TOS": 这设置了访问密钥(Access Key),是用户进行API调用时需要提供的识别码。在这个例子中,访问密钥被设置为 "8PI2D9ARWNGJI99K8TOS"。
- --gen-secret: 这个选项指示 radosgw-admin 自动生成一个对应的密钥(Secret Key)。密钥是用户进行API调用时需要提供的安全凭证。
2)向现有用户添加访问密钥
使用--gen-access-key选项。为指定的用户生成一个新的访问密钥(access key)
-
命令:radosgw-admin key create --uid=<用户唯一标识符> --gen-access-key
[ceph: root@node /]# radosgw-admin key create --uid=s3user --gen-access-key
命令的各部分参数解释如下:执行此命令时,Ceph 系统会为 s3user 用户生成一个新的访问密钥。这个访问密钥通常与一个密钥(secret key)配对使用,用于通过 S3 API 进行身份验证和授权。
- radosgw-admin: 这是 Ceph RADOS Gateway 的管理命令行工具。
- key create: 这是一个指示 radosgw-admin 创建新密钥的子命令。
- --uid=s3user: 指定了用户的唯一标识符(UID),在此例中是 s3user。该 UID 应对应于 RGW 中的一个已存在用户。
- --gen-access-key: 这个选项告诉 radosgw-admin 自动生成一个新的访问密钥(access key)。
注意:命令中没有显示生成密钥(--gen-secret)选项,通常创建密钥时会同时生成访问密钥和密钥。如果只指定了 --gen-access-key 而没有指定 --gen-secret,可能需要单独生成或指定密钥。当创建密钥时,系统通常会输出包含新访问密钥和对应密钥的 JSON 格式信息。这些信息应妥善保存,因为它们将被用于客户端配置,使其能够通过 S3 兼容的接口与 Ceph RGW 进行通信和数据操作。
3)从用户中删除访问密钥和相关的私密密钥
使用radosgw-admin key rm命令和--access-key选项。该命令用于在RGW中删除指定用户的一个特定访问密钥
-
命令:radosgw-admin key rm --uid=<用户唯一标识符> --access-key=<访问密钥>
[ceph: root@node /]# radosgw-admin key rm --uid=s3user --access-key=8PI2D9ARWNGJI99K8TOS
命令的各部分参数解释如下:删除与 UID s3user 关联的访问密钥 8PI2D9ARWNGJI99K8TOS
- radosgw-admin: Ceph RADOS Gateway 的命令行管理工具。
- key rm: 这是一个子命令,用于删除一个已存在的密钥。
- --uid=s3user: 指定了要删除密钥的用户的唯一标识符(UID),在此例中是 s3user。
- --access-key=8PI2D9ARWNGJI99K8TOS: 指定要删除的具体访问密钥。
4)列出所有RADOS Gateway用户
列出所有RGW用户
-
命令:radosgw-admin user list
查看bucket
-
命令:radosgw-admin bucket list
5)暂时禁用和启用RGW用户
使用radosgw-admin user suspend和radosgw-admin user enable暂时禁用和启用RADOS网关用户。
-
命令:radosgw-admin user suspend
-
命令:radosgw-admin user enable
6)修改用户信息及访问控制级别
使用radosgw-admin user modify可修改用户的电子邮件、显示名、密钥和访问控制级别等信息。访问控制级别为:读、读写、全部权限。用于修改 Ceph RADOS Gateway 中已存在用户的权限。
-
命令:radosgw-admin user modify --uid=<用户唯一标识符> --access=<permission>
[ceph: root@node /]# radosgw-admin user modify --uid=johndoe --access=full
参数的含义如下:
- radosgw-admin: 这是 Ceph RADOS Gateway 的命令行管理工具。
- user modify: 子命令,指示 radosgw-admin 修改一个现有用户的属性。
- --uid=johndoe: 指定要修改的用户的唯一标识符(UID),在此例中是 johndoe。
- --access=full: 指定对该用户授予全部权限。在 Ceph RGW 中,这通常意味着用户将拥有进行所有操作的权限,包括读取、写入和删除存储桶及其中的对象。
access的权限: 参数可以接受不同的值,来控制用户的权限级别
- read: 用户只有读取权限。
- write: 用户只有写入权限。
- readwrite: 用户有读取和写入权限。
- full: 用户有完全的权限,包括读取、写入和管理员权限。
7)删除用户并删除其对象和存储桶
使用--purge-data选项,删除用户并删除其对象和存储桶
-
命令:radosgw-admin user rm --uid=<用户唯一标识符> --purge-data
[ceph: root@node /]# radosgw-admin user rm --uid=s3user --purge-data
8)设置配额,限制user或者bucket可使用的存储资源
设置配额,限制user或者bucket可以使用的存储资源。
配额管理是一种重要的资源控制手段,可以帮助防止单个用户占用过多的资源或导致存储过度使用。在设置配额时,管理员需要考虑用户的需求和预期的存储使用情况,以合理地制定配额限制。
-
命令:radosgw-admin quota set --quota-scope=<配额设置的范围> --uid=<用户唯一标识符> --max-objects=<拥有的最大对象数量>
[ceph: root@node /]# radosgw-admin quota set --quota-scope=user --uid=app1 --max-objects=1024
参数的含义如下:执行此命令后,用户 app1 的账户将被限制,使得他们无法在其所有的存储桶中存储超过 1024 个对象。如果用户尝试超出这个限制上传更多的对象,将会收到错误消息,指示配额已满。
- radosgw-admin: 这是 Ceph RADOS Gateway 的命令行管理工具。
- quota set: 子命令,用于设置用户或存储桶的配额。
- --quota-scope=user: 指定配额设置的范围是用户级别。这意味着配额限制将应用于该用户在 Ceph RADOS Gateway 中的所有存储桶。
- --uid=app1: 指定要设置配额的用户的唯一标识符(UID),在此例中是 app1。
- --max-objects=1024: 设置用户能够拥有的最大对象数量限制为 1024 个。这意味着用户 app1 在所有存储桶中总共能存储的对象数量不能超过 1024 个。
【--quota-scope】 参数通常有以下两个值:
- user: 指定配额限制将应用于一个特定用户。这意味着设置的配额将会涵盖该用户在 Ceph RADOS Gateway 中所有存储桶的资源使用情况。
- bucket: 指定配额限制将应用于一个特定的存储桶。当这个参数被设置时,通常还需要指定存储桶的名称来应用配额设置,这样配额限制就只影响这一个特定的存储桶。
9)设置并启用配额参数
设置配额参数,然后启用配额。
-
命令:radosgw-admin quota enable --quota-scope=<配额设置的范围> --uid=<用户唯一标识符>
[ceph: root@node /]# radosgw-admin quota enable --quota-scope=user --uid=app1
10)设置并将配额应用于bucket
类似地,通过为bucket设置--quota-scope选项,将配额应用于bucket。
例如:将loghistory的最大大小设置为1024 bytes.
[ceph: root@node /]# radosgw-admin quota set --quota-scope=bucket --uid=loghistory --max-size=1024B
[ceph: root@node /]# radosgw-admin quota enable --quota-scope=bucket --uid=loghistory
11)为所有桶配置全局配额
全局配额影响集群中的所有桶。
-
命令:radosgw-admin global quota set --quota-scope=<配额设置的范围> --uid=<用户唯一标识符> --max-objects=<拥有的最大对象数量>
[ceph: root@node /]# radosgw-admin global quota set --quota-scope bucket --max-objects 2024
[ceph: root@node /]# radosgw-admin global quota enable --quota-scope bucket
12)查看用户信息和统计信息
使用命令radosgw-admin user stats和radosgw-admin user info查看用户信息和统计信息。
-
命令:radosgw-admin user info --uid=uid
-
命令:radosgw-admin user stats --uid=uid
3、通过 RGW 访问S3对象
Amazon S3 API支持多种桶URL格式,包括两种格式:
- http://server.example.com/bucket/
- http://bucket.server.example.com/.
Amazon S3 API支持多个URL访问格式。
但是有些客户端软件,比如s3cmd命令仅支持第二种URL格式。
RADOS Gateway默认没有开启第二种URL格式。
设置rgw_dns_name参数去启用第二种URL格式。
-
命令:ceph config set client.rgw rgw_dns_name dns_suffix
其中dns_suffix是完全合格的域名用于创建您的桶的名称
4、使用 Amazon S3 API Clients
1)通过S3 API支持桶和对象管理
awscli 软件包中的命令通过S3 API支持桶和对象管理。使用aws mb命令创建桶。使用 AWS CLI(Amazon Web Services Command Line Interface)创建一个新的 Amazon S3(Simple Storage Service)存储桶。
-
命令:aws s3 mb s3://demobucket
解释如下:执行此命令,AWS CLI 会向 Amazon S3 服务发送一个请求,请求创建一个名为 demobucket 的存储桶。存储桶是 S3 中存储对象(如文件和数据)的容器。
- aws: 这是调用 AWS CLI 的命令。
- s3: 指定该命令将针对 Amazon S3 服务执行。
- mb: 是 make bucket 的缩写,表示创建一个新的存储桶。
- s3://demobucket: 指定了新存储桶的名称,这里的存储桶名称是 demobucket。
2)上传对象到存储桶
使用aws cp命令上传对象到桶中。
-
命令:aws --acl=public-read-write s3 cp <本地文件> s3://桶/文件名
-
选项:--acl public-read-write 参数指定了该对象的访问控制列表(ACL),使得任何人都可以读取和写入该对象。
【--acl 】参数用来设置对象的预定义ACL策略。下面是一些常用的 ACL 选项:
- private: 文件只能被存储桶的所有者访问。
- public-read: 任何人都可以读取文件,但只有所有者有写入和删除权限。
- public-read-write: 任何人都可以读取和写入文件。这种设置比较危险,因为它允许公众上传和删除文件,可能导致安全风险和额外的费用。
- authenticated-read: 只有 AWS 账户的认证用户可以读取文件,但只有所有者有写入和删除权限。
- aws-exec-read: 在 AWS 内部使用,例如 EC2 访问 AMIs。
- bucket-owner-read: 允许对象所有者和存储桶所有者读取文件。
- bucket-owner-full-control: 即使对象由其他 AWS 账户创建,存储桶的所有者也具有完全控制权。
[ceph: root@node /]# aws --acl=public-read-write s3 cp /tmp/demoobject s3://demobucket/demoobject
将本地文件系统中的文件 /tmp/demoobject 复制到名为 demobucket 的 S3 存储桶中,并将该对象的键(key)设置为demoobjec
Lab: 使用Amazon S3 API 提供对象存储
[root@foundation0 ~]# ssh root@serverc
[root@serverc ~]# vim /etc/yum.repos.d/aws.repo
[epel-8-for-x86_64-rpms]
baseurl = http://content.example.com/rhel8.4/x86_64/rhel8-additional/epel-8-for-x86_64-rpms/
enabled = true
gpgcheck = false
name = awscli
[root@serverc ~]# yum -y install awscli
//或者
[root@foundation0 ~]# ssh student@workstation
[student@workstation ~]$ lab start api-s3
Starting lab.
· Checking lab systems ........................ SUCCESS
· Installing awscli ........................... SUCCESS
1. 创建名为operator的Amazon S3 API用户
[root@serverc ~]# cephadm shell
[ceph: root@serverc /]# radosgw-admin user create \
--uid="operator" --display-name="S3 Operator" --email="operator@example.com" \
--access_key="12345" --secret="67890"

2. 配置AWS CLI工具以使用操作员凭据
配置AWS CLI工具以使用操作员凭据。输入12345作为接入密钥,67890作为私密密钥。
[ceph: root@serverc /]# exit
[root@serverc ~]# aws configure --profile=ceph
AWS Access Key ID [None]: 12345
AWS Secret Access key [None]: 67890
Default region name [None]: Enter
Default output format [None]: Enter

3. 创建名为testbucket的桶
创建一个名为testbucket的桶。列出已创建的桶。
[root@serverc ~]# aws --profile=ceph --endpoint=http://serverd:8080 s3 mb s3://testbucket
[root@serverc ~]# aws --profile=ceph --endpoint=http://serverd:8080 s3 ls s3://testbucket
- --profile=ceph: 这个参数指定了AWS CLI使用的配置文件(profile),在这里是ceph。AWS CLI允许你在~/.aws/credentials文件中设置多个配置文件,每个配置文件包含一组访问密钥和其他配置。在这个例子中,ceph配置文件可能包含了访问兼容S3接口服务的凭证。
- --endpoint=http://serverd:8080: 这个参数指定了S3服务的端点(endpoint)。通常,AWS S3的端点会是https://s3.amazonaws.com,但在这个例子中,命令是连接到http://serverd:8080。这意味着CLI不是连接到AWS,而是连接到一个运行在serverd主机上,端口8080上的兼容S3 API的服务。这可能是一个Ceph S3网关,或者任何其他支持S3协议的存储解决方案。
4. 上传文件到testbucket桶
创建一个10MB的文件10MB.bin。将文件上传到testbucket桶。
[root@serverc ~]# dd if=/dev/zero of=/tmp/10MB.bin bs=1024K count=10
[root@serverc ~]# aws --profile=ceph --endpoint=http://serverd:8080 \
--acl=public-read-write s3 cp /tmp/10MB.bin s3://testbucket/10MB.bin
5.验证
验证S3对象是否可以使用路径样式的url访问。
[root@serverc ~]# wget -O /dev/null http://serverd:8080/testbucket/10MB.bin
使用radosgw-admin命令查看testbucket的元数据。
[root@serverc ~]# cephadm shell -- radosgw-admin bucket list
[
"testbucket"
]
[root@serverc ~]# cephadm shell -- radosgw-admin metadata get bucket:testbucket
{
"key": "bucket:testbucket",
"ver": {
"tag": "_2d3Y6puJve1TnY..."
"ver": 1
},
"mtime": "2022-10-06T01:51:37.514627Z",
"data": {
"bucket": {
"name": "testbucket",
"marker": "cb16a524-d938-4fa2-837f-d1f20116..."
"bucket_id": "cb16a524-d938-4f..."
... ...
}
}
[root@serverc ~]# exit
思维导图:

小结:
本篇为 【RHCA认证 - CL260 | Day09:使用 REST API 访问对象存储】的学习笔记,希望这篇笔记可以让您初步了解如何为 Amazon S3 API 创建用户、如何管理 RGW 用户、通过 RGW 访问S3对象、使用Amazon S3 API 提供对象存储,不妨跟着我的笔记步伐亲自实践一下吧!
Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关环境、视频,可评论666并私信小安,请放下你的羞涩,花点时间直到你真正的理解。
127

被折叠的 条评论
为什么被折叠?



