在代码开始时验证AWS KMS值

时间:2018-01-30 06:06:22

标签: python regex amazon-web-services validation aws-kms

我通过String和正则表达式中的模式匹配来验证KMS ARN值。

示例输入:arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

规则:

  • 以“arn:aws:kms:”字符串值开头。
  • 后跟地区名称。
  • ℃。其次是冒号“:”
  • d。后跟数值。
  • 后跟冒号“:”
  • 后跟“key”字符串值。
  • 后跟字母和/或数字和/或下划线字符串值。这又是对UUD的验证。

获取AWS区域的代码:

>>> import boto3
>>> session_obj = boto3.session.Session()
>>> session_obj.get_available_regions('lambda')

KMS验证代码:

def validate_aws_kms_arns(kms_arns_str):
    """
        Validate KMS ARNS
        Format: arn:aws:kms:$RegionCode$:$AccountNumber$:key/$UUID$
        $RegionCode$ : list of region Ids
        $AccountNumber$ : Interger account number.
        $UUID$: uuid
    """
    # Get Region Value list from AWS.
    lambda_region_list = ['ap-northeast-1', 'ap-northeast-2', 'ap-south-1', 'ap-southeast-1', 'ap-southeast-2', 'ca-central-1', 'eu-central-1', 'eu-west-1', 'eu-west-2', 'eu-west-3', 'sa-east-1', 'us-east-1', 'us-east-2', 'us-west-1', 'us-west-2']

    pattern = re.compile("\Aarn:aws:kms:({}):\d+:key/([\w-]+)\Z".format(
            '|'.join(lambda_region_list))
    )
    match_obj = pattern.match(kms_arns_str)
    if bool(pattern.match(kms_arns_str)):
        uuid_value = match_obj.groups()[1]
    else:
        print("Invalid KMS ARNS value: {}".format(kms_arns_str))
        return False

    # UUID Validation.
    # ...

    return True

但我看到https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces这个。

我们还需要验证分区和服务的KMS ARNS值吗? 以上代码验证KMS值是否正确?

0 个答案:

没有答案