来自 Terraform 的 RDS StartDBInstanceAutomatedBackupsReplication preSignedURL (GovCloud)

问题描述 投票:0回答:1

尝试部署 Terraform aws_db_instance_automated_backups_replication 资源以启用将 rds 备份从 1 个区域复制到另一个区域。在 AWS 商业版中可以使用此功能,但在 AWS GovCloud 中的相同部署失败了。

TF 中的 AWS 资源定义为:

resource "aws_db_instance_automated_backups_replication" "db_backup_replication" {
 provider = aws.recovery_region
 source_db_instance_arn = aws_db_instance.db.arn
 kms_key_id             = data.aws_kms_key.rds_recovery_kms_key.arn
 retention_period = local.retention_days
}

...但是 Terraform 输出中的错误是:

Error: starting RDS Instance Automated Backups Replication (arn:<partition>:rds:<primary-region>:<aws-accountID>:db:<rds-instance-name>): 
operation error RDS: StartDBInstanceAutomatedBackupsReplication, 
https response error StatusCode: 400, 
RequestID: *******-****-****-****-************, 
api error InvalidParameterValue: Encrypted instances require a valid presigned URL.

TF 文档列出了资源的可选参数:

pre_signed_url - (可选,强制新资源)包含 签名版本 4 签名的请求 要在以下位置调用的 StartDBInstanceAutomatedBackupsReplication 操作 源数据库实例的 AWS 区域。

...AWS API 文档 (https://docs.aws.amazon.com/cli/latest/reference/rds/start-db-instance-automated-backups-replication.html) 有更多详细信息:

在 Amazon Web Services GovCloud(美国)区域中,包含 签名版本 4 签名的请求 StartDBInstanceAutomatedBackupsReplication 操作中调用 源数据库实例的 Amazon Web Services 区域。预先签署的 URL 必须是有效的请求 StartDBInstanceAutomatedBackupsReplication 可运行的 API 操作 在包含源数据库的 Amazon Web Services 区域中 实例。

此设置仅适用于 Amazon Web Services GovCloud(美国) 地区。它在其他 Amazon Web Services 区域中被忽略。

要了解如何生成签名版本 4 签名的请求,请参阅 验证请求:使用查询参数 (Amazon Web Services 签名版本 4) 和签名版本 4 签名流程。

但是他们的链接文档详细介绍了仅为 s3 URL 生成此类 preSignedURL。我什至在 google 中找不到该错误(“加密实例需要有效的预签名 URL”)。

有什么想法吗?

amazon-web-services terraform amazon-rds pre-signed-url aws-govcloud
1个回答
0
投票

我认为有 boto3 generate_presigned_url 方法,可用于为 RDS 生成预签名 URL。尽管文档仅提供了生成 S3 预签名 URL 的示例,但只要

ClientMethod
Params
start_db_instance_automated_backups_replication 输入要求

匹配,它也应该适用于 RDS 客户端
import boto3

session = boto3.Session(profile_name='profile_name')

url = session.client('rds', < source region >).generate_presigned_url(
    ClientMethod='start_db_instance_automated_backups_replication',
    Params={
        'SourceDBInstanceArn': < source db instance arn>,
        'BackupRetentionPeriod': < retention period>,
        'KmsKeyId': < kms key id >,
        'SourceRegion': < source region >
    },
    ExpiresIn=3600,
    HttpMethod=< http method >
)

print(url)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.