如何在应用 AWS 策略之前验证 ARN?

kei*_*ian 5 amazon-s3 amazon-web-services amazon-iam aws-sdk

我在一个配置文件中有一个来自多个账户的 ARN 列表,然后我将其构建到 S3 存储桶策略中。但是,如果这些 ARN 之一无效,例如arn:aws:iam::12345679012:user/foo-bar,那么在尝试应用包含该 ARN 的策略时,我将收到以下异常:

lib/aws/core/client.rb:375:in `return_or_raise': Invalid principal in policy (AWS::S3::Errors::MalformedPolicy)

如果我的文件中的任何 ARN 被删除,这似乎可能会导致问题。然后,我无法附加到现有策略。我必须找出哪个 ARN 是“毒丸”并将其删除。但是异常消息没有向我提供该信息。

问题:

  1. 有没有更好的方法来管理我无法控制的大量跨账户 ARN?
  2. 在将 ARN 应用于 S3 存储桶策略之前,有没有办法验证它是否存在?

小智 2

你的问题没有指定 ruby​​,所以我将向你展示我如何使用 Python Boto3 库处理这个问题(我怀疑很糟糕)。

尝试使用多个 ARN 更新假设角色策略时,一个或多个 ARN 无效。这是产生错误的 boto 调用:

try:
  iamClient.update_assume_role_policy(RoleName=curated_role_name, PolicyDocument=json.dumps(assume_role_policy_document))
except botocore.exceptions.ClientError as e:
  print (e.response['Error']['Message'])
Run Code Online (Sandbox Code Playgroud)

上述代码片段的结果是:

Invalid principal in policy: "AWS":"arn:aws:iam::42xxxxx:user/idontexist"
Run Code Online (Sandbox Code Playgroud)

然后,我执行一个简单的 RE 来提取错误的 ARN,然后尝试重新应用我的更新。如果列表中仍然存在错误的 ARN,那么我会获取列表中的下一个并将其删除。这会重复进行,直到策略被接受为止。

我正在寻找与您完全相同的东西 - “ARN 验证器”。我没有找到,所以我必须自己处理。我考虑过检查单独函数中涉及的所有 ARN,但由于很少遇到此问题,因此我不想产生开销。

我希望本文对您有所帮助。

戴夫·奥