我在一个配置文件中有一个来自多个帐户的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是"毒丸"并将其删除。但异常消息并没有向我提供这些信息。
问题:
- 有没有更好的方法来管理我无法控制的大量跨账户ARN
- 在将ARN应用于S3存储桶策略之前,是否有方法验证ARN的存在
您的问题没有指定ruby,所以我将向您展示我是如何使用Python Boto3库处理这一问题的(我怀疑很糟糕)。
当尝试用多个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,但由于很少遇到这个问题,我不想产生开销。
我希望你能发现其中的一些有用之处。
Dave O