amazon-web-services - 为什么 aws lambda 会收到“AccessDeniedExceptionKMS”错误消息?
问题描述
我刚刚将一个 lambda(使用来自 gitlab runner 的 Terraform)部署到一个新的 aws 帐户。此管道将 lambda 部署到另一个(开发/测试)帐户没有问题,但是当我尝试部署到我的产品帐户时,我收到以下错误:
我正在磨练声明,“密文是指不存在的客户主密钥,在该区域不存在,或者您不允许访问。”
我已经确认 env vars 的加密配置设置为使用默认 aws/lambda 密钥而不是客户主密钥。这似乎与指客户主密钥的错误语言相矛盾......?
lambda 承担的角色确实有一个包含两个 kms 操作的策略:
"Sid": "AWSKeyManagementService",
"Action": [
"kms:Decrypt",
"kms:DescribeKey"
]
通过消除过程,我想知道问题是否在于 kms 密钥上基于资源的策略的缺失。查看 kms 密钥,在 aws managed 下,我发现 aws/lambda 密钥具有以下密钥策略:
{
"Version": "2012-10-17",
"Id": "auto-awslambda",
"Statement": [
{
"Sid": "Allow access through AWS Lambda for all principals in the account that are authorized to use AWS Lambda",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:CreateGrant",
"kms:DescribeKey"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:ViaService": "lambda.us-east-1.amazonaws.com",
"kms:CallerAccount": "REDACTED"#<-- Account where lambda deployed
}
}
},
{
"Sid": "Allow direct access to key metadata to the account",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::REDACTED:root"#<-- Account where lambda deployed
},
"Action": [
"kms:Describe*",
"kms:Get*",
"kms:List*",
"kms:RevokeGrant"
],
"Resource": "*"
}
]
}
这是非常令人费解的。任何指针表示赞赏!
解决方案
这通过简单地删除 lambda 然后重新运行我的管道以重新部署它来解决。我所能得出的结论是,在第一次部署中有些东西被破坏了。
推荐阅读
- hadoop - 如何从中心点终止 apache Impala 2.10 中正在运行的查询
- javascript - 在 Angular 4+ 中插入数据的最佳方法
- dask-distributed - 如何将任务分配给 Dask.Distributed 中的特定工作人员
- maven - Maven 测试不与外部 Jar 一起运行
- tensorflow - 了解检测 API 配置文件
- apache-spark - 无法访问通过 Google dataproc 集群上的 Airflow 提交的 PySpark 作业中的环境变量
- r - 在 R 中使用遗传算法进行逐步种群评估
- sql-server - 加入时将一列中的值汇总到不同表的一行中
- kubernetes - 更新图像标签以通过 CloudBuilder 提交 SHA 的最佳方法是什么?
- cucumber - 在黄瓜功能文件中使用“*”关键字的正确方法是什么