fuz*_*zzi 4 sql-server amazon-s3 amazon-web-services
我已按照将 sqlserver 数据库备份到 s3 的说明进行操作。
\n\nhttps://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}\nRun Code Online (Sandbox Code Playgroud)\n\n我已经添加了,当然还添加了bucket_name 和正确的密钥ARN。\n 我还确认此角色用于添加到 RDS 实例的选项组。
\n\n然而,当我跑步时
\n\nexec 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;\nRun Code Online (Sandbox Code Playgroud)\n\n然而,这会导致:
\n\nTask 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\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,这无需 msdb.dbo.rds_backup_database 调用中的 kms_master_key_arn 选项即可工作。
\n\n我错过了什么吗?
\nKMS 服务与其他 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 支持。