2.3.9. 使用 AWS CLI 访问 Ceph 对象网关


您可以使用 AWS CLI 进行 S3 访问。此流程提供安装 AWS CLI 和一些示例命令来执行各种任务的步骤,如从 MFA-Delete 启用了存储桶中删除对象。

先决条件

  • Ceph 对象网关用户级访问权限.
  • 根级访问开发工作站。
  • 使用 radosgw-admin mfa create创建多因素身份验证(MFA) TOTP 令牌

流程

  1. 安装 awscli 软件包:

    [user@dev]$ pip3 install --user awscli
  2. 配置 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_KEYMY_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]:

  3. 创建一个别名以指向 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"

  4. 创建新存储桶:

    语法

    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

  5. 列出拥有的存储桶:

    语法

    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"
        }
    }

  6. 为 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'

  7. 查看存储桶版本状态的 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"
    }

  8. 在启用了 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"
      }

  9. 列出特定对象的对象版本:

    语法

    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"
      }

  10. 在启用了 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

  11. 列出对象版本以验证是否已从 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"
      }

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.