【问题标题】:creating AWS S3 bucket with Ansible使用 Ansible 创建 AWS S3 存储桶
【发布时间】:2020-05-04 14:33:53
【问题描述】:

下面是我创建 S3 存储桶的 yml 文件。出于安全目的,我没有在此处粘贴实际的 aws_access_key 和 aws_secret_key,只是在下面的 sn-p 中将它们显示为 *****。我已经在安装了 Ansible 的 Ec2 实例上安装了 boto3、boto、AWS CLI。

--- - 主机:本地主机 任务: - 名称:创建 S3 存储桶 变成:真 aws_s3: aws_access_key=****** aws_secret_key=**** 存储桶=testbuck 模式=创建权限=公共读取区域=us-east-1

当我使用 ansible-playbook 命令执行上面的 yml 文件时,它会给出如下所示的异常。 请帮助我解决此问题,以便创建名为“testbuck”的 S3 存储桶。

任务执行期间发生异常。要查看完整的回溯,请使用 -vvv。错误是:botocore.exceptions.ClientError:调用 HeadBucket 操作时发生错误(403):禁止 致命的:[本地主机]:失败! => {“boto3_version”:“1.10.44”,“botocore_version”:“1.13.44”,“已更改”:false,“错误”:{“代码”:“403”,“消息”:“禁止”} ,“msg”:“查找存储桶时失败(在bucket_check期间)testbuck。:调用HeadBucket操作时发生错误(403):Forbidden”,“response_metadata”:{“host_id”:“OmIY2bLkh4T4JwxD/UJsM47n7oUUS6ttEL9ZMl+vv66bVsLcwQuP2pzAGr05m1LdtznYudr , "http_headers": {"content-type": "application/xml", "date": "Fri, 17 Jan 2020 16:54:49 GMT", "server": "AmazonS3", "transfer-encoding": “分块”,“x-amz-bucket-region”:“us-east-1”,“x-amz-id-2”:“OmIY2bLkh4T4JwxD/UJsM47n7oUUS6ttEL9ZMl+vv66bVsLcwQuP2pzAGr05m1LdtznYudrrapk=”,“x-amz-request-id” :“51740FB276A10A18”},“http_status_code”:403,“request_id”:“51740FB276A10A18”,“retry_attempts”:0}}

【问题讨论】:

    标签: amazon-web-services amazon-s3 ansible


    【解决方案1】:

    HeadBucket 操作是检查 s3 存储桶是否存在以及您是否有权访问它。要使用此操作,您的 IAM 角色/用户必须能够执行 s3:ListBucket 操作。 Bucket Owner 默认拥有此权限,并将此权限授予其他人。更多信息参考s3官方文档https://docs.aws.amazon.com/en_us/AmazonS3/latest/API/API_HeadBucket.html

    【讨论】:

      【解决方案2】:

      您应该需要检查是否有s3:ListBucket 访问权限。这是官方 s3 文档https://docs.aws.amazon.com/en_us/AmazonS3/latest/API/API_HeadBucket.html

      【讨论】:

        【解决方案3】:

        默认情况下,Ansible 命令在创建之前使用check if a bucket exists 运行。也许您使用的 IAM 用户没有检查存储桶是否存在的权限。尝试添加:

        aws_s3: ... ignore_nonexistent_bucket: True

        或者授予用户s3:ListBucket权限。

        【讨论】:

        • 我的用户是拥有所有权限的管理员用户。正如你所建议的,我修改了我的 yml 以包含 ignore_nonexistent_bucket=true。 aws_s3: aws_access_key=****** aws_secret_key=**** 存储桶=testbuck 模式=创建权限=公共读取区域=us-east-1 ignore_nonexistent_bucket=true
        • 现在 yml 没有给出错误并且执行成功,但是没有创建存储桶“testbuck”。下面是 yml [root@redhat ~]# ansible-playbook create_S3_bucket.yml TASK [Create an S3 bucket] 的输出 ************************ ****************************************************** **** 好的:[localhost] 播放回顾 *************************************** ****************************************************** ****************************************************** ****************** localhost : 好的=2 更改=0 无法访问=0 失败=0 跳过=0 获救=0 忽略=0
        • 这很可能是因为testbuck存在于另一个帐户中,并且bucket名称应该是全局唯一的,请尝试设置一个唯一的bucket名称。
        • 感谢 Yann 提供的所有帮助。它现在正在工作。 :)
        猜你喜欢
        • 2020-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-25
        • 2017-10-09
        • 2017-04-24
        • 1970-01-01
        • 2020-07-16
        相关资源
        最近更新 更多