跨AWS账户Lambda拉取ECR镜像时KMS解密权限异常求助
错误信息
Lambda can't decrypt the container image because KMS access is denied. Check the function's KMS key settings.
KMS Exception: AccessDeniedExceptionKMS Message: The ciphertext refers to a customer master key that does not exist,
does not exist in this region, or you are not allowed to access.
核心排查步骤
验证区域一致性
确认账户A/B/C中Lambda所在区域,与账户D里ECR绑定的KMS密钥区域完全匹配。KMS是区域级资源,跨区域无直接访问权限,哪怕权限配置正确也会触发该错误。检查KMS密钥策略的跨账户配置
确保KMS密钥策略已正确添加账户A/B/C的Lambda执行角色ARN,且包含kms:Decrypt和kms:DescribeKey操作。必须使用完整角色ARN,避免仅用账户ID导致权限匹配错误。
参考策略片段:{ "Sid": "AllowCrossAccountLambdaAccess", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::ACCOUNT-A-ID:role/YourLambdaRole-A", "arn:aws:iam::ACCOUNT-B-ID:role/YourLambdaRole-B", "arn:aws:iam::ACCOUNT-C-ID:role/YourLambdaRole-C" ] }, "Action": ["kms:Decrypt", "kms:DescribeKey"], "Resource": "*" }确认Lambda角色的权限边界
若账户A/B/C的Lambda角色设置了权限边界,需确保边界策略同样允许访问账户D的KMS密钥。权限边界会限制角色的最大权限,即使角色本身有允许策略,边界不授权也会导致访问被拒。验证ECR加密配置
检查账户D的ECR仓库是否确实使用了指定的客户托管KMS密钥,而非AWS托管密钥或其他密钥。通过ECR控制台查看仓库加密设置,核对密钥ARN与配置的一致性。检查ECR跨账户访问权限
Lambda执行角色需具备ECR跨账户操作权限:ecr:GetDownloadUrlForLayer、ecr:BatchGetImage、ecr:BatchCheckLayerAvailability。确保这些权限已添加到角色策略中,且资源指向账户D的ECR仓库ARN。确认KMS密钥状态
检查账户D的KMS密钥是否处于启用状态,未被禁用或标记为计划删除。密钥禁用时,任何权限配置都无法生效。排查组织SCP或会话策略限制
若使用AWS Organizations,检查服务控制策略(SCP)是否限制了账户A/B/C对跨账户KMS密钥的访问。同时,若Lambda角色附加了会话策略,需确认该策略未阻止相关KMS操作。
内容的提问来源于stack exchange,提问作者mik3fly-4steri5k

