如何解决在 AWS Backup 中进行跨账户复制时出现的“无法访问给定的密钥 ID”错误?

2 分钟阅读
0

当我在 AWS Backup 中进行跨账户复制时,收到了错误“无法访问给定的密钥 ID”。

简短描述

在使用 AWS Backup 从一个 AWS 账户到另外一个 AWS 账户进行跨账户复制时,您会收到类似于以下消息的错误:

“无法访问给定的密钥 ID”

-或-

“源快照 KMS 密钥不存在、未启用或您无权访问它”

要成功创建跨账户副本,您必须在源账户 AWS Key Management Service(AWS KMS)密钥策略中允许目标账户。要执行各种加密操作,需要获得以下 AWS KMS 权限:

  • DescribeKey
  • Encrypt
  • Decrypt
  • ReEncryptFrom
  • ReEncryptTo
  • GenerateDataKeyPair
  • GenerateDataKeyPairWithoutPlaintext
  • GenerateDataKeyWithoutPlaintext
  • CreateGrant
  • ListGrant
  • RevokeGrant

解决方法

您必须在源账户 AWS KMS 密钥策略中包含目标账户根用户。然后,目标账户根用户向用户和角色委派必要的 AWS Identity and Access Management(AWS IAM)权限。

对于支持全面 AWS Backup 管理的资源,源 AWS KMS 密钥是保管库的加密密钥。源 AWS KMS 密钥可以是客户自主管理型密钥或 AWS 托管式密钥。如果源 AWS KMS 密钥是客户自主管理型密钥,那么您必须修改此密钥策略以包含目标账户。

对于不支持全面 AWS Backup 管理的资源,源 AWS KMS 密钥是原始资源的加密密钥。源 AWS KMS 密钥必须是客户自主管理型密钥,并且您必须修改密钥策略以包含目标账户。

**注意:**源 AWS KMS 密钥不能是 AWS 托管式密钥。这是因为 AWS 托管式密钥不允许您修改密钥策略。此外,您无法与目标账户共享 AWS 托管式密钥。

源 AWS KMS 密钥策略

要从一个账户到另一个账户创建副本,请修改您的源 AWS KMS 密钥以包含以下权限:

**注意:**请将 SourceAccountIDDestinationAccountID 替换为您的源账户 ID 和目标账户 ID。

{  
    "Version": "2012-10-17",  
    "Id": "cab-kms-key",  
    "Statement": [{  
            "Sid": "Enable IAM User Permissions",  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": "arn:aws:iam::SourceAccountID:root"  
            },  
            "Action": "kms:*",  
            "Resource": "*"  
        },  
        {  
            "Sid": "Allow use of the key",  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": [  
                    "arn:aws:iam::SourceAccountID:root",  
                    "arn:aws:iam::DestinationAccountID:root"  
                ]  
            },  
            "Action": [  
                "kms:DescribeKey",  
                "kms:Encrypt",  
                "kms:Decrypt",  
                "kms:ReEncrypt*",  
                "kms:GenerateDataKey*"  
            ],  
            "Resource": "*"  
        },  
        {  
            "Sid": "Allow attachment of persistent resources",  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": [  
                    "arn:aws:iam::SourceAccountID:root",  
                    "arn:aws:iam::DestinationAccountID:root"  
                ]  
            },  
            "Action": [  
                "kms:CreateGrant",  
                "kms:ListGrants",  
                "kms:RevokeGrant"  
            ],  
            "Resource": "*",  
            "Condition": {  
                "Bool": {  
                    "kms:GrantIsForAWSResource": "true"  
                }  
            }  
        }  
    ]  
}

**提示:**在上述策略中,您可以使用 arn:aws:iam::DestinationAccountID:AWSServiceRoleforBackup 限制访问目标账户中的一个角色,而不要使用 arn:aws:iam::DestinationAccountID:rootAWSServiceRoleforBackup 是一个在目标账户中自动创建的服务角色,用于将源账户中的备份提取到目标账户。

在 AWS Backup 中对跨账户副本进行加密的其他注意事项

要查看哪些资源类型符合全面 AWS Backup 管理的条件,请参阅按资源划分的功能可用性

如果该资源支持全面 AWS Backup 管理,那么您可以使用客户自主管理型 AWS KMS 密钥或 AWS 托管式密钥对这些资源进行加密。在这种情况下,将进行以下加密:

  • 使用源保管库 AWS KMS 密钥对源备份进行加密。
  • 使用目标保管库 AWS KMS 密钥对目标副本进行加密。

要从不支持全面 AWS Backup 管理的资源中创建跨账户副本,请使用客户自主管理型 AWS KMS 密钥对资源进行加密。在这种情况下,将进行以下加密:

  • 使用原始资源加密密钥对源备份进行加密。
  • 使用目标保管库 AWS KMS 密钥对目标副本进行加密。

相关信息

什么是 AWS Backup?

确保跨区域/跨账户部署解决方案中的代码安全

对 AWS Backup 中的备份进行加密

AWS 官方
AWS 官方已更新 10 个月前
没有评论