为何MWAA的IAM策略用NotResource指定内置AWS KMS密钥才能生效?
MWAA IAM策略中NotResource用于KMS操作的原理解释
先搞懂NotResource的基础作用
IAM策略里的NotResource是反向资源匹配规则:它定义的是「策略允许的操作,不适用于这些资源」,反过来就是——除了NotResource列表里的资源,其他所有资源都能执行指定操作。
结合MWAA场景看为什么这么写
MWAA运行过程中需要访问两类KMS密钥:
- 你自己创建的、专门用于加密MWAA环境(比如Airflow元数据、日志、DAG存储)的密钥;
- AWS托管的KMS密钥(比如S3桶用的默认加密密钥、其他AWS服务集成时用到的托管密钥)。
如果直接用Resource指定你自己的密钥ARN,MWAA访问AWS托管密钥时会被拒绝,导致运行异常。但如果直接写Resource: "*",又会允许访问所有KMS密钥,安全风险太高。
用NotResource的逻辑就是:明确排除掉绝对不能让MWAA访问的敏感密钥,剩下的所有KMS密钥(包括你自己的和AWS托管的)都允许访问——既满足MWAA的运行需求,又把权限控制在安全范围内。
举个实际例子理解
比如官方文档里的策略语句:
{ "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "NotResource": "arn:aws:kms:us-east-1:123456789012:key/xxxx-xxxx-xxxx-xxxx" }
这句话直白翻译就是:允许解密、查看密钥信息,但唯独不能对指定ARN的那个密钥执行这些操作,其他所有KMS密钥都可以。
安全层面的优势
这种写法比直接用*更严谨:既不会遗漏MWAA依赖的各类KMS资源,又能精准禁止访问特定敏感密钥,平衡了功能需求和安全管控。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

