我有一个脚本,该脚本复制了跨区域的未加密和加密的快照。脚本使用未加密的快照副本正常工作,但是由于某种原因,加密的副本失败了,错误: -
An error occurred (InvalidParameterValue) when calling the CopyDBSnapshot operation: PreSignedUrl could not be authenticated.
这是我用来复制加密快照的代码
aws rds copy-db-snapshot
--source-db-snapshot-identifier $source_identifier
--target-db-snapshot-identifier ${target_identifier}
--kms-key-id $Enc_Key_ID
--region $target_region
--source-region $source_region
--tags Key="owner",Value="RDS Copy Job"
在此处传递的所有变量(加密密钥除外)在跨区域的未加密副本都可以正常工作。
我想知道什么问题。任何帮助和建议对我来说都是一个很好的帮助。(更新)
aws rds copy-db-snapshot
--source-db-snapshot-identifier arn:aws:rds:us-west-1:717934610271:snapshot:rds:rds-snapshot-name-dev-2017-12-22-08-08
--target-db-snapshot-identifier test-rds-snapshotname
--kms-key-id XXXXXX-XXXXXX-XXXXXX-XXXXXX
--region us-east-1
--source-region us-west-1
--tags Key="owner",Value="RDS Copy Job"
上面是用于复制的完整命令。我正在使用arn复制
指定在目标区域中有效的kms键。
您可以复制使用AWS KMS加密的快照 加密密钥。如果复制一个加密快照,则 快照也必须加密。如果您复制加密快照 在同一AWS区域内,您可以使用相同的KMS加密副本 加密密钥作为原始快照,也可以指定一个 不同的KMS加密密钥。如果您复制跨越加密的快照 区域,您不能使用相同的KMS加密密钥作为该副本 用于源快照,因为kms键是特定于区域的。 相反,您必须在目标AWS中指定有效的KMS密钥 区域。
处理加密
下面的脚本对我有用,想法是,如果不是在目标AWS区域中创建kms默认密钥,而不是使用KMS ID alias/aws/rds
,它将创建新的KMSID。
#!/bin/bash
if [[ -z $1 ]]; then
echo "please input source region from which copy"
exit
fi
if [[ -z $2 ]]; then
echo "please input destination region"
exit
fi
REGION_SOURCE=$1
REGION_DESTINATION=$2
RDS_DBSnapshotIdentifier=`/usr/bin/aws rds describe-db-snapshots --region $REGION_SOURCE --query="reverse(sort_by(DBSnapshots, &SnapshotCreateTime))[0]" | /usr/bin/jq -r '.DBSnapshotArn'`
echo "Copying RDS from $REGION_SOURCE to $REGION_DESTINATION"
TODAY_DATE=`/bin/date +"%Y-%m-%d-%H-%M-%S"`
KMS_KEY_ID=`/usr/bin/aws kms list-aliases --region $REGION_DESTINATION| /usr/bin/jq -r '.[]' | /usr/bin/jq -r '.[] | select( .AliasName == "alias/aws/rds")' | /usr/bin/jq -r '.TargetKeyId'`
if [[ $KMS_KEY_ID == null ]]; then
KMS_KEY_ID="alias/aws/rds"
fi
/usr/bin/aws rds copy-db-snapshot --kms-key-id $KMS_KEY_ID --source-db-snapshot-identifier $RDS_DBSnapshotIdentifier --target-db-snapshot-identifier "RDS-COPY-${TODAY_DATE}-from-${REGION_SOURCE}-to-${REGION_DESTINATION}" --region $REGION_DESTINATION --source-region $REGION_SOURCE
我发现当您复制加密快照时,--source-region
参数是必须提供的。这是工作CLI命令 -
AWS_DEFAULT_REGION=ap-south-1
source_snapshot_arn="arn:aws:rds:ap-southeast-1:3621xxxx334:snapshot:v2db-snapshot-1"
dest_snapshot_id="v2db-snapshot-1"
aws rds copy-db-snapshot
--kms-key-id db-prod-kms
--source-region ap-southeast-1
--source-db-snapshot-identifier $source_snapshot_arn
--target-db-snapshot-identifier $dest_snapshot_id
工作kms密钥策略 -
{
"Version": "2012-10-17",
"Id": "key-consolepolicy-3",
"Statement": [
{
"Sid": "Allow backup to use key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::3621xxxx8334:user/backup"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey",
"kms:CreateGrant",
"kms:Create*",
"kms:Describe*",
"kms:List*",
"kms:Get*",
"kms:ImportKeyMaterial",
"kms:TagResource",
"kms:UntagResource"
],
"Resource": "*"
}
]
}