使用s3cmd连接ceph创建的rgw,一直返回403 forbidden

测试环境,没有配置ssl证书,使用s3cmd和s3 browser设置end point为http和不使用ssl,还是返回403

原因:ceph的默认RGW认证配置参数启动了ssl,需要修改为默认不适用ssl即可

ceph config set client.rgw rgw_verify_ssl false
ceph config set client.rgw rgw_crypt_require_ssl false
如果只执行第一个条命令,也会生效,执行完后,重启下rgw服务

执行上面两个命令后,即可访问,不会返回403了

测试环境 HTTP 访问 S3 的配置指南

在测试环境中没有配置 SSL 证书的情况下,您可以通过以下配置确保 S3 服务可以通过 HTTP 正常访问:

1. 禁用 SSL 相关安全要求

# 禁用 SSL 验证(允许连接到外部服务时不验证证书)
ceph config set client.rgw rgw_verify_ssl false

# 允许通过 HTTP 执行加密操作
ceph config set client.rgw rgw_crypt_require_ssl false

2. 配置 RGW 使用 HTTP

# 设置前端为 Beast(Quincy 默认前端),监听 HTTP 端口
ceph config set client.rgw rgw_frontends "beast port=80"

3. 重启 RGW 服务使配置生效

ceph orch restart rgw.foo

4. 配置 S3 客户端使用 HTTP

对于 s3cmd

~/.s3cfg 文件中确保:

use_https = False
host_base = ceph01  # 或您的 RGW 主机名/IP
host_bucket = %(bucket)s.ceph01

对于 AWS CLI

aws configure set default.s3.use_ssl false
aws configure set default.endpoint_url http://ceph01

5. 验证 HTTP 访问

# 测试基本连接
curl http://ceph01/

# 使用 s3cmd 测试
s3cmd ls

# 使用 AWS CLI 测试
AWS_ACCESS_KEY_ID="您的access_key" AWS_SECRET_ACCESS_KEY="您的secret_key" \
aws s3 ls --endpoint-url http://ceph01

6. 创建测试用户(可选)

# 创建测试用户
radosgw-admin user create --uid="testuser" --display-name="Test User"

# 设置简单权限
radosgw-admin caps add --uid=testuser --caps="buckets=read,write; users=read"

7. 测试环境防火墙设置

# 确保 80 端口开放
sudo ufw allow 80/tcp

8. 完整测试脚本

#!/bin/bash
# test-s3-http.sh

# 设置环境变量
ENDPOINT="http://ceph01"
ACCESS_KEY="您的access_key"
SECRET_KEY="您的secret_key"
BUCKET="test-bucket-$(date +%s)"
TEST_FILE="test-file.txt"

# 创建测试文件
echo "This is a test file for HTTP S3 access" > $TEST_FILE

# 测试创建存储桶
AWS_ACCESS_KEY_ID=$ACCESS_KEY AWS_SECRET_ACCESS_KEY=$SECRET_KEY \
aws --endpoint-url $ENDPOINT s3 mb s3://$BUCKET

# 测试上传文件
AWS_ACCESS_KEY_ID=$ACCESS_KEY AWS_SECRET_ACCESS_KEY=$SECRET_KEY \
aws --endpoint-url $ENDPOINT s3 cp $TEST_FILE s3://$BUCKET/

# 测试列出文件
AWS_ACCESS_KEY_ID=$ACCESS_KEY AWS_SECRET_ACCESS_KEY=$SECRET_KEY \
aws --endpoint-url $ENDPOINT s3 ls s3://$BUCKET/

# 清理
AWS_ACCESS_KEY_ID=$ACCESS_KEY AWS_SECRET_ACCESS_KEY=$SECRET_KEY \
aws --endpoint-url $ENDPOINT s3 rm s3://$BUCKET/$TEST_FILE
AWS_ACCESS_KEY_ID=$ACCESS_KEY AWS_SECRET_ACCESS_KEY=$SECRET_KEY \
aws --endpoint-url $ENDPOINT s3 rb s3://$BUCKET
rm $TEST_FILE

echo "HTTP S3 测试完成"

注意事项

  1. ​仅限测试环境​​:这些配置会降低安全性,仅适用于测试环境
  2. ​生产环境必须使用 HTTPS​​:在生产环境中必须配置有效的 SSL/TLS 证书
  3. ​密钥保护​​:HTTP 传输中密钥是明文传输,确保测试环境网络安全
  4. ​防火墙限制​​:限制只允许内部网络访问测试环境的 HTTP S3 服务

通过这些配置,您可以在没有 SSL 证书的测试环境中通过 HTTP 正常访问 S3 服务。

posted @ 2025-09-16 17:42  mofy  阅读(21)  评论(0)    收藏  举报