如何在Python校验AWS IAM政策场景下使用正则表达式做字符串匹配
AWS IAM政策S3资源ARN正则匹配实现方案
完全可以通过正则表达式实现你要的匹配逻辑,不需要用等号做固定值判断,改用Python正则模块做匹配即可,具体实现如下:
1. 正则规则构造
你要求匹配由字母、数字组成的存储桶名称,对应的S3桶ARN正则规则为:r'^arn:aws:s3:::[a-zA-Z0-9]+$'
规则各部分说明:
^匹配字符串开头,避免ARN前出现多余字符arn:aws:s3:::是S3存储桶ARN的固定前缀,完全匹配[a-zA-Z0-9]+匹配1个及以上的大小写字母/数字,对应你要求的桶名规则$匹配字符串结尾,避免把arn:aws:s3:::bucket/object这类S3对象ARN误判为桶ARN
如果需要兼容AWS官方的S3桶命名规则(支持横杠、点,仅小写,长度3-63位),可以使用更严谨的正则:r'^arn:aws:s3:::[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$'
2. 校验代码实现
需要先导入Python内置的re模块,将原来的固定值相等判断替换为正则匹配逻辑,修正后的代码如下:
import re # 预编译正则规则,提升多次校验的性能 S3_BUCKET_ARN_PATTERN = re.compile(r'^arn:aws:s3:::[a-zA-Z0-9]+$') def has_valid_s3_bucket_arn(policy): for policy_item in policy: resources = policy_item['Resource'] for resource in resources: if S3_BUCKET_ARN_PATTERN.match(resource): return True return False
3. 扩展适配说明
- 如果需要匹配IAM政策中带通配符的S3桶ARN(比如
arn:aws:s3:::test-bucket*),可以把正则的桶名部分调整为[a-zA-Z0-9*]+ - 如果需要同时匹配S3对象ARN,可以去掉正则结尾的
$,或补充路径匹配规则 - 预编译正则可以避免每次校验都重新解析规则,适合多次调用的场景
内容的提问来源于stack exchange,提问作者Mxvii
相关产品推荐
相关产品推荐

