![无法使用 CLI 写入 AWS S3 存储桶](https://linux22.com/image/763693/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20CLI%20%E5%86%99%E5%85%A5%20AWS%20S3%20%E5%AD%98%E5%82%A8%E6%A1%B6.png)
我正在运行 Github CD 操作,它从我的仓库中获取一些文件并尝试将它们上传到我拥有的 S3 存储桶中。
该操作运行此命令:
/usr/bin/docker run --name e4f859ff89ec6549659693150859a75828_d1b6eb --label 5588e4 --workdir /github/workspace --rm -e AWS_S3_BUCKET -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_REGION -e SOURCE_DIR -e INPUT_ARGS -e HOME -e GITHUB_JOB -e GITHUB_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_REPOSITORY_OWNER -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RETENTION_DAYS -e GITHUB_ACTOR -e GITHUB_WORKFLOW -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GITHUB_EVENT_NAME -e GITHUB_SERVER_URL -e GITHUB_API_URL -e GITHUB_GRAPHQL_URL -e GITHUB_WORKSPACE -e GITHUB_ACTION -e GITHUB_EVENT_PATH -e GITHUB_ACTION_REPOSITORY -e GITHUB_ACTION_REF -e GITHUB_PATH -e GITHUB_ENV -e RUNNER_OS -e RUNNER_TOOL_CACHE -e RUNNER_TEMP -e RUNNER_WORKSPACE -e ACTIONS_RUNTIME_URL -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/_temp/_runner_file_commands":"/github/file_commands" -v "/home/runner/work/prepay-frontend/prepay-frontend":"/github/workspace" 5588e4:f859ff89ec6549659693150859a75828 --acl public-read --follow-symlinks --delete
出于隐私原因,AWS_S3_BUCKET、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 和 AWS_REGION 都被混淆了,但我确信它们配置正确,因为我可以从我的 AWS 控制台中看到与 AWS_ACCESS_KEY_ID 关联的用户正在被使用。
问题是我收到这个错误:
上传失败:public/index.html 到 s3://***/index.html 调用 PutObject 操作时发生错误(AccessDenied):Access Denied
我不明白为什么,这是与用户相关的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListObjectsInBucket",
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::MY-bucket-name"]
},
{
"Sid": "AllObjectActions",
"Effect": "Allow",
"Action": "s3:*Object",
"Resource": ["arn:aws:s3:::MY-bucket-name/*"]
}
]
}
如果我没记错的话,该策略授予用户对存储桶 MY-bucket-name 上的文件的完全控制权。我这里遗漏了什么?
答案1
如果您将策略从 更改为s3:*Object
进行s3:*
测试以验证确实是该策略阻止了请求,结果会怎样?
也许有一个存储桶策略或 SCP 或策略边界干扰了请求。它们都不能拒绝访问才能成功。
希望有帮助:)