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

时间:2015-12-22 16:06:31

标签: amazon-web-services amazon-s3 aws-sdk amazon-iam

我有一个配置文件中来自众多帐户的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存储桶策略之前,有没有办法验证ARN是否存在?

1 个答案:

答案 0 :(得分:1)

你的问题没有指定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'])

以上代码段的结果是:

Invalid principal in policy: "AWS":"arn:aws:iam::42xxxxx:user/idontexist"
然后我做一个简单的RE来提取坏的ARN,然后尝试重新应用我的更新。如果列表中仍然存在错误的ARN,那么我将获取列表中的下一个ARN并将其删除。直到政策被接受为止。

我正在寻找与你完全相同的东西 - 一个“ARN验证器”。我没有找到它,所以我必须自己处理它。我考虑检查所有涉及单独功能的ARN,但由于我很少遇到问题,我不想承担开销。

我希望你能找到一些有用的东西。

Dave O