2.3.9. 使用 AWS CLI 访问 Ceph 对象网关
您可以使用 AWS CLI 进行 S3 访问。此流程提供安装 AWS CLI 和一些示例命令来执行各种任务的步骤,如从 MFA-Delete 启用了存储桶中删除对象。
先决条件
- Ceph 对象网关用户级访问权限.
- 根级访问开发工作站。
-
使用
radosgw-admin mfa create
创建多因素身份验证(MFA) TOTP 令牌
流程
安装
awscli
软件包:[user@dev]$ pip3 install --user awscli
配置
awscli
以使用 AWS CLI 访问 Ceph 对象存储:语法
aws configure --profile=MY_PROFILE_NAME AWS Access Key ID [None]: MY_ACCESS_KEY AWS Secret Access Key [None]: MY_SECRET_KEY Default region name [None]: Default output format [None]:
将
MY_PROFILE_NAME
替换为您要用来识别此配置集的名称。按照 Red Hat Ceph Storage Object Gateway Configuration 和 Administration Guide 所述,将MY_ACCESS_KEY
和MY_SECRET_KEY
替换为创建S3
访问时生成的access_key
和secret_key
。示例
[user@dev]$ aws configure --profile=ceph AWS Access Key ID [None]: 12345 AWS Secret Access Key [None]: 67890 Default region name [None]: Default output format [None]:
创建一个别名以指向 Ceph 对象网关节点的 FQDN:
语法
alias aws="aws --endpoint-url=http://FQDN_OF_GATEWAY_NODE:8080"
将
FQDN_OF_GATEWAY_NODE
替换为 Ceph 对象网关节点的 FQDN。示例
[user@dev]$ alias aws="aws --endpoint-url=http://testclient.englab.pnq.redhat.com:8080"
创建新存储桶:
语法
aws --profile=MY_PROFILE_NAME s3api create-bucket --bucket BUCKET_NAME
将
MY_PROFILE_NAME
替换为您创建使用此配置集的名称。将BUCKET_NAME
替换为新存储桶的名称。示例
[user@dev]$ aws --profile=ceph s3api create-bucket --bucket mybucket
列出拥有的存储桶:
语法
aws --profile=MY_PROFILE_NAME s3api list-buckets
将
MY_PROFILE_NAME
替换为您创建使用此配置集的名称。示例
[user@dev]$ aws --profile=ceph s3api list-buckets { "Buckets": [ { "Name": "mybucket", "CreationDate": "2021-08-31T16:46:15.257Z" } ], "Owner": { "DisplayName": "User", "ID": "user" } }
为 MFA-Delete 配置存储桶:
语法
aws --profile=MY_PROFILE_NAME s3api put-bucket-versioning --bucket BUCKET_NAME --versioning-configuration '{"Status":"Enabled","MFADelete":"Enabled"}' --mfa 'TOTP_SERIAL TOTP_PIN'
-
将
MY_PROFILE_NAME
替换为您创建使用此配置集的名称。 -
将
BUCKET_NAME
替换为新存储桶的名称。 -
将
TOTP_SERIAL
替换为 TOTP 令牌的 ID,并将TOTP_PIN
替换为 MFA 身份验证设备上的当前 pin。 -
TOTP_SERIAL
是为 S3 创建 radosgw 用户时指定的字符串。 - 有关创建 MFA TOTP 令牌的详情,请参阅 Red Hat Ceph Storage Object Gateway Configuration 和 Administration Guide 中创建新的多因素身份验证 TOTP 令牌 部分。
有关使用 oathtool 创建 MFA seed for multi-factor authentication 部分,请参阅 Red Hat Ceph Storage Developer Guide 中的 oathtool 部分。
示例
[user@dev]$ aws --profile=ceph s3api put-bucket-versioning --bucket mybucket --versioning-configuration '{"Status":"Enabled","MFADelete":"Enabled"}' --mfa 'MFAtest 232009'
-
将
查看存储桶版本状态的 MFA-Delete 状态:
语法
aws --profile=MY_PROFILE_NAME s3api get-bucket-versioning --bucket BUCKET_NAME
将
MY_PROFILE_NAME
替换为您创建使用此配置集的名称。将BUCKET_NAME
替换为新存储桶的名称。示例
[user@dev]$ aws --profile=ceph s3api get-bucket-versioning --bucket mybucket { "Status": "Enabled", "MFADelete": "Enabled" }
在启用了 MFA-Delete 的存储桶中添加对象:
语法
aws --profile=MY_PROFILE_NAME s3api put-object --bucket BUCKET_NAME --key OBJECT_KEY --body LOCAL_FILE
-
将
MY_PROFILE_NAME
替换为您创建使用此配置集的名称。 -
将
BUCKET_NAME
替换为新存储桶的名称。 -
将
OBJECT_KEY
替换为将唯一标识存储桶中对象的名称。 将
LOCAL_FILE
替换为要上传的本地文件的名称。示例
[user@dev]$ aws --profile=ceph s3api put-object --bucket mybucket --key example --body testfile { "ETag": "\"5679b828547a4b44cfb24a23fd9bb9d5\"", "VersionId": "3VyyYPTEuIofdvMPWbr1znlOu7lJE3r" }
-
将
列出特定对象的对象版本:
语法
aws --profile=MY_PROFILE_NAME s3api list-object-versions --bucket BUCKET_NAME --key OBJEC_KEY]
-
将
MY_PROFILE_NAME
替换为您创建使用此配置集的名称。 -
将
BUCKET_NAME
替换为新存储桶的名称。 将
OBJECT_KEY
替换为在存储桶中唯一标识对象的名称。示例
[user@dev]$ aws --profile=ceph s3api list-object-versions --bucket mybucket --key example { "IsTruncated": false, "KeyMarker": "example", "VersionIdMarker": "", "Versions": [ { "ETag": "\"5679b828547a4b44cfb24a23fd9bb9d5\"", "Size": 196, "StorageClass": "STANDARD", "Key": "example", "VersionId": "3VyyYPTEuIofdvMPWbr1znlOu7lJE3r", "IsLatest": true, "LastModified": "2021-08-31T17:48:45.484Z", "Owner": { "DisplayName": "User", "ID": "user" } } ], "Name": "mybucket", "Prefix": "", "MaxKeys": 1000, "EncodingType": "url" }
-
将
在启用了 MFA-Delete 的存储桶中删除对象:
语法
aws --profile=MY_PROFILE_NAME s3api delete-object --bucket BUCKET_NAME --key OBJECT_KEY --version-id VERSION_ID --mfa 'TOTP_SERIAL TOTP_PIN'
-
将
MY_PROFILE_NAME
替换为您创建使用此配置集的名称。 -
将
BUCKET_NAME
替换为包含要删除的对象的存储桶的名称。 -
将
OBJECT_KEY
替换为唯一标识 bucket 中对象的名称。 -
将
VERSION_ID
替换为您要删除的对象的特定版本的 VersionID。 将
TOTP_SERIAL
替换为代表 TOTP 令牌的 ID 和TOTP_PIN
的字符串,在您的 MFA 身份验证设备上显示当前的 pin。示例
[user@dev]$ aws --profile=ceph s3api delete-object --bucket mybucket --key example --version-id 3VyyYPTEuIofdvMPWbr1znlOu7lJE3r --mfa 'MFAtest 420797' { "VersionId": "3VyyYPTEuIofdvMPWbr1znlOu7lJE3r" }
如果没有包含 MFA 令牌,则请求会失败并显示以下错误。
示例
[user@dev]$ aws --profile=ceph s3api delete-object --bucket mybucket --key example --version-id 3VyyYPTEuIofdvMPWbr1znlOu7lJE3r An error occurred (AccessDenied) when calling the DeleteObject operation: Unknown
-
将
列出对象版本以验证是否已从 MFA-Delete 启用存储桶中删除:
语法
aws --profile=MY_PROFILE_NAME s3api list-object-versions --bucket BUCKET_NAME --key OBJECT_KEY
-
将
MY_PROFILE_NAME
替换为您创建使用此配置集的名称。 -
将
BUCKET_NAME
替换为存储桶的名称。 将
OBJECT_KEY
替换为唯一标识 bucket 中对象的名称。示例
[user@dev]$ aws --profile=ceph s3api list-object-versions --bucket mybucket --key example { "IsTruncated": false, "KeyMarker": "example", "VersionIdMarker": "", "Name": "mybucket", "Prefix": "", "MaxKeys": 1000, "EncodingType": "url" }
-
将