在 boto3 中创建/使用预签名 URL 时无法验证访问凭据

赛德

我正在使用 boto3 将加密的 EBS 快照从一个区域复制到另一个区域,但是Invalid presigned URL当我尝试复制时一直收到消息。generate_presigned_url在源区域使用 boto3 客户端方法生成预签名 URL,并在目标区域调用复制函数,如下所示:

uw2_client = non_prod.client(
    'ec2', 
    region_name="us-west-2", 
    config=Config(signature_version='s3v4')
)
presigned_url = uw2_client.generate_presigned_url(
    ClientMethod='copy_snapshot',
    Params={
        'SourceSnapshotId': og_snapshot_id,   # Original snapshot ID
        'SourceRegion': 'us-west-2',
        'DestinationRegion': 'us-east-1'
        # I also tried include all parameters from copy_snapshot.
        # It didn't make a difference.
        # 'Description': desc,
        # 'KmsKeyId': 'alias/xva-nonprod-all-amicopykey',
        # 'Encrypted': True,
    }
)

这是我创建副本的代码。

ue1_client = non_prod.client(
    'ec2', 
    region_name="us-east-1", 
    config=Config(signature_version='s3v4')
)
response = ue1_client.copy_snapshot(
    Description=desc,
    KmsKeyId='alias/xva-nonprod-all-amicopykey',   # Exists in us-east-1
    Encrypted=True,
    SourceSnapshotId=og_snapshot_id,
    SourceRegion='us-west-2',
    DestinationRegion='us-east-1',
    PresignedUrl=pre_signed_url
)

它成功返回预签名的 URL。但是,如果我尝试使用该预签名 URL 来复制快照,则会收到无效 URL 错误。如果我尝试验证网址:

r = requests.post(presigned_url)
print(r.status_code)
print(r.text)

我得到:

<Response>
    <Errors>
        <Error>
            <Code>AuthFailure</Code>
            <Message>AWS was not able to validate the provided access credentials</Message>
        </Error>
    </Errors>
    <RequestID>3189bb5b-54c9-4d11-ab4c-762cbea32d9a</RequestID>
</Response>

您可能认为我的凭据会出现问题,但我不确定如何...这与我用来创建预签名 URL 的凭据相同。我的 IAM 用户可以不受限制地访问 EC2。

我显然在这里做错了什么,但我无法弄清楚它是什么。任何见解将不胜感激。

编辑

只是为了确认这不是权限问题,我使用可以访问所有内容的个人帐户进行了尝试。仍然收到相同的错误消息。

赛德

事实证明,文档是错误的......在同一账户中复制加密快照时不需要签名 URL(根据 AWS Support)。

来自 AWS 支持:

...实际上没有必要创建预签名 URL 来将加密快照从一个区域复制到另一个区域(在同一 AWS 账户中)。

但是,根据他们的文档,也不可能将加密快照复制到另一个帐户...¯\_(ツ)_/¯

当前的boto3.EC2.Client.copy_snapshot函数文档说:

PresignedUrl(字符串)--

当您使用 Amazon EC2 Query API 复制加密的源快照时,您必须提供一个预签名的 URL。对于未加密的快照,此参数是可选的。

相反,它可以通过在目标区域中创建客户端对象并copy_snapshot()像这样调用方法来简单地完成

try:
    ec2 = boto3.client(
        service_name='ec2',
        region_name='us-east-1'
    )

    ec2.copy_snapshot(
        SourceSnapshotId='snap-xxxxxxxxxxxx',
        SourceRegion='us-west-2',
        Encrypted=True,
        KmsKeyId='DestinationRegionKeyId'
    )
except Exception as e:
    print(e)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用 Boto3 在 Cloudformation 中获取 API 网关的预签名 URL?

来自分类Dev

Boto3预签名URL,用于下载和上传

来自分类Dev

如何使用Boto3创建预签名URL以从S3存储桶下载文件?

来自分类Dev

使用 boto3 创建带有自定义标头的 s3 预签名 url(放置)

来自分类Dev

boto3创建未过期的URL

来自分类Dev

Boto3使用旧的凭据

来自分类Dev

使用Boto3无法在Fargate容器中找到凭据

来自分类Dev

无法使用 boto3 从 DynamoDB StringSet 中删除项目

来自分类Dev

IdentityServer3访问令牌验证和预签名的URL

来自分类Dev

通过AWS Lambda使用boto3访问被拒绝

来自分类Dev

无法使用boto3将消息写入SQS

来自分类Dev

尝试使用 Boto3 调用 Lamba 时出现 InvalidSignatureException

来自分类Dev

未指定终结点URL时,boto3 sqs错误的URL

来自分类Dev

使用Boto3使用自定义日志记录信息为get_object创建一个预先签名的S3 URL?

来自分类Dev

使用Boto3上传到Amazon S3并返回公共URL

来自分类Dev

Boto3 访问对象

来自分类Dev

无法安装boto3

来自分类Dev

boto3 Route53抱怨无法连接到端点URL:

来自分类Dev

通过boto3更新S3对象元数据时出现签名错误

来自分类Dev

在DAG中使用boto3时,Apache airflow无法找到AWS凭证

来自分类Dev

使用Boto3创建存储桶时如何添加自定义标头?

来自分类Dev

尝试使用Boto3创建IAM角色时,总是出现MalformedPolicyDocument错误

来自分类Dev

预签名的AWS S3 PUT URL无法使用jquery从客户端上传

来自分类Dev

Lambda在使用Boto3访问另一个帐户中的S3存储桶时超时

来自分类Dev

如何使用boto3从名称中带有句点(。)的存储桶访问密钥?

来自分类Dev

创建亚马逊AWS S3预签名URL PHP

来自分类Dev

Sqlalchemy-创建Amazon S3预签名URL

来自分类Dev

如何使用boto3从S3访问项目并读取()其内容

来自分类Dev

无法使用python3使用boto3删除快照

Related 相关文章

  1. 1

    如何使用 Boto3 在 Cloudformation 中获取 API 网关的预签名 URL?

  2. 2

    Boto3预签名URL,用于下载和上传

  3. 3

    如何使用Boto3创建预签名URL以从S3存储桶下载文件?

  4. 4

    使用 boto3 创建带有自定义标头的 s3 预签名 url(放置)

  5. 5

    boto3创建未过期的URL

  6. 6

    Boto3使用旧的凭据

  7. 7

    使用Boto3无法在Fargate容器中找到凭据

  8. 8

    无法使用 boto3 从 DynamoDB StringSet 中删除项目

  9. 9

    IdentityServer3访问令牌验证和预签名的URL

  10. 10

    通过AWS Lambda使用boto3访问被拒绝

  11. 11

    无法使用boto3将消息写入SQS

  12. 12

    尝试使用 Boto3 调用 Lamba 时出现 InvalidSignatureException

  13. 13

    未指定终结点URL时,boto3 sqs错误的URL

  14. 14

    使用Boto3使用自定义日志记录信息为get_object创建一个预先签名的S3 URL?

  15. 15

    使用Boto3上传到Amazon S3并返回公共URL

  16. 16

    Boto3 访问对象

  17. 17

    无法安装boto3

  18. 18

    boto3 Route53抱怨无法连接到端点URL:

  19. 19

    通过boto3更新S3对象元数据时出现签名错误

  20. 20

    在DAG中使用boto3时,Apache airflow无法找到AWS凭证

  21. 21

    使用Boto3创建存储桶时如何添加自定义标头?

  22. 22

    尝试使用Boto3创建IAM角色时,总是出现MalformedPolicyDocument错误

  23. 23

    预签名的AWS S3 PUT URL无法使用jquery从客户端上传

  24. 24

    Lambda在使用Boto3访问另一个帐户中的S3存储桶时超时

  25. 25

    如何使用boto3从名称中带有句点(。)的存储桶访问密钥?

  26. 26

    创建亚马逊AWS S3预签名URL PHP

  27. 27

    Sqlalchemy-创建Amazon S3预签名URL

  28. 28

    如何使用boto3从S3访问项目并读取()其内容

  29. 29

    无法使用python3使用boto3删除快照

热门标签

归档