情况是:
使用SAM/CloudFormation创建lambda函数。附加一个策略以允许该函数访问现有的bucket(在同一区域中)。它看起来像这样:
MyFunction:
Type: AWS::Serverless::Function
Properties:
.....
Policies:
- Statement:
- Effect: Allow
Action:
- "s3:ListBucket"
- "s3:PutObject"
- "s3:GetObject"
Resource:
- "arn:aws:s3:::my-great-existing-bucket"
- "arn:aws:s3:::my-great-existing-bucket/*"
这意味着:不修改现有桶的策略,新创建的lambda函数现在可以访问该桶。
但是在这种情况下,这个已经存在的桶是用一个现有的客户管理的KMS密钥额外加密的(同样在同一区域),所以Lambda函数的访问仍然会被拒绝。
目标是将使用现有密钥的策略也直接添加到云形成模板中。
我找到这个链接:https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html
我的解释是,指定的目标通常只能通过另一种方式实现:需要修改KMS-key的策略。但是他们的Key当然不是通过云形成堆栈管理的,因此不能在这里管理(或者我错了吗?)
所以实现它的唯一方法是激活KMS-key的通用IAM策略?https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-root-enable-iam
这种理解正确吗?
所以实现它的唯一方法是为KMS-key激活一般IAM策略?
是的。对. 如果您的客户管理的KMS密钥没有它,您必须修改KMS策略以允许lambda角色。如果你激活了一般的IAM policy,那么你只需要修改lambda执行角色的KMS密钥权限。