试图从RDS备份S3,但即使假定的角色已获得许可,也会收到与KMS:生成的错误消息相关的错误消息



我遵循了将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支持。

最新更新