我遵循了将SQLServer DB备份到S3中的说明。
https://docs.aws.amazon.com/amazonrds/latest/userguide/sqlserver.procedural.importing.html
我已经创建了一个角色:
{
"Version": "2012-10-17",
"Statement":
[
{
"Effect": "Allow",
"Action":
[
"kms:DescribeKey",
"kms:GenerateDataKey",
"kms:Encrypt",
"kms:Decrypt"
],
"Resource": "arn:aws:kms:region:account-id:key/key-id"
},
{
"Effect": "Allow",
"Action":
[
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::bucket_name"
},
{
"Effect": "Allow",
"Action":
[
"s3:GetObject",
"s3:PutObject",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": "arn:aws:s3:::bucket_name/*"
}
]
}
我添加了,当然还添加了bucket_name和正确的密钥ARN。 我还确认该角色用于添加到RDS实例中的选件组。
但是,当我运行
时exec msdb.dbo.rds_backup_database
@source_db_name='dbname',
@s3_arn_to_backup_to='arn:aws:s3:::s3-bucket/name',
@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id',
@overwrite_S3_backup_file=1,
@type=‘FULL’;
但是,这导致:
Task has been aborted [] User: arn:aws:sts::account-number:assumed-role/rolename/role is not authorized to perform: kms:GenerateDataKey on resource: arn-to-kms
注意,此功能在MSDB.DBO.RDS_BACKUP_DATABASE CALL中无需KMS_MASTER_KEY_ARN选项。
我想念什么吗?
kms服务与其他AWS服务有点不同,因为您的帐户和CMK之间没有隐含的信任,这意味着将IAM权限附加到用户或角色是不够的。
如果您想使用IAM允许kms操作,则需要在关键策略中指定这一点 - 您需要在帐户中添加完整的权限。
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::111122223333:root"},
"Action": "kms:*",
"Resource": "*"
}
当然,您需要使用您的帐号更改111122223333
。
如果您不想在您的帐户和CMK之间建立此信任,则使用关键策略而不是IAM并指定角色为委托人。
确保您要么将密钥管理员或上述语句保留在密钥策略中。如果您删除了这两个,则将自己锁定在钥匙之外,而恢复它的唯一方法是联系AWS支持。