使用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 測試完成"
注意事項
- ??僅限測試環境??:這些配置會降低安全性,僅適用于測試環境
- ??生產環境必須使用 HTTPS??:在生產環境中必須配置有效的 SSL/TLS 證書
- ??密鑰保護??:HTTP 傳輸中密鑰是明文傳輸,確保測試環境網絡安全
- ??防火墻限制??:限制只允許內部網絡訪問測試環境的 HTTP S3 服務
通過這些配置,您可以在沒有 SSL 證書的測試環境中通過 HTTP 正常訪問 S3 服務。

浙公網安備 33010602011771號