尝试从 RDS 备份到 s3,但收到与 kms:GenerateDataKey 相关的错误消息,即使假定的角色具有权限

fuz*_*zzi 4 sql-server amazon-s3 amazon-web-services

我已按照将 sqlserver 数据库备份到 s3 的说明进行操作。

\n\n

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.html

\n\n

我创建了一个角色:

\n\n
{\n    "Version": "2012-10-17",\n    "Statement":\n    [\n        {\n        "Effect": "Allow",\n        "Action":\n            [\n                "kms:DescribeKey",\n                "kms:GenerateDataKey",\n                "kms:Encrypt",\n                "kms:Decrypt"\n            ],\n        "Resource": "arn:aws:kms:region:account-id:key/key-id"\n        },\n        {\n        "Effect": "Allow",\n        "Action":\n            [\n                "s3:ListBucket",\n                "s3:GetBucketLocation"\n            ],\n        "Resource": "arn:aws:s3:::bucket_name"\n        },\n        {\n        "Effect": "Allow",\n        "Action":\n            [\n                "s3:GetObject",\n                "s3:PutObject",\n                "s3:ListMultipartUploadParts",\n                "s3:AbortMultipartUpload"\n            ],\n        "Resource": "arn:aws:s3:::bucket_name/*"\n        }\n    ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我已经添加了,当然还添加了bucket_name 和正确的密钥ARN。\n 我还确认此角色用于添加到 RDS 实例的选项组。

\n\n

然而,当我跑步时

\n\n
exec msdb.dbo.rds_backup_database\n@source_db_name=\'dbname\',\n@s3_arn_to_backup_to=\'arn:aws:s3:::s3-bucket/name\',\n@kms_master_key_arn=\'arn:aws:kms:region:account-id:key/key-id\',\n@overwrite_S3_backup_file=1,\n@type=\xe2\x80\x98FULL\xe2\x80\x99;\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,这会导致:

\n\n
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\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,这无需 msdb.dbo.rds_backup_database 调用中的 kms_master_key_arn 选项即可工作。

\n\n

我错过了什么吗?

\n

Mat*_*ava 5

KMS 服务与其他 AWS 服务略有不同,因为您的账户和 CMK 之间不存在隐式信任,这意味着将 IAM 权限附加到用户或角色是不够的。

如果您想使用 IAM 允许 KMS 操作,则需要在密钥策略中指定这一点 - 您需要向您的账户添加完整权限。

{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:root"},
  "Action": "kms:*",
  "Resource": "*"
}
Run Code Online (Sandbox Code Playgroud)

当然,您需要更改111122223333您的帐号。

如果您不想在账户和 CMK 之间建立这种信任,请使用密钥策略而不是 IAM 并将角色指定为委托人。

请确保您将密钥管理员或上述声明保留在您的密钥策略中。如果您删除它们,您将无法获得密钥,恢复密钥的唯一方法是联系 AWS 支持。