以编程方式访问AWS IAM用户策略和访问

时间:2019-07-04 18:20:30

标签: objective-c swift amazon-web-services amazon-s3 aws-amplify

我有一个使用AWS SDK iOS 2.9.10的应用程序,将AWS IAM用户登录到他/她的AWS S3帐户。我希望能够评估用户是否对该帐户下的各种S3存储桶具有读/写访问权限。基本上,我想以编程方式执行此操作:

aws iam list-user-policies --user-name IAM_User_Name

aws iam get-user-policy --user-name IAM_User_Name --policy-name IAM_Policy_Name

使用这些输出来知道IAM用户可以访问哪个S3存储桶,然后我可以检查IAM策略中的“操作”字段(如果它允许“ s3:GetObject”或“ s3:”)和资源字段包含的值为“ arn:aws:s3 ::: examplebucket / ”或“ *”。如果两者均适用,则IAM用户有权使用S3“ examplebucket”。

但是,我无法确定是否可以通过AWS SDK iOS(Swift或Objective-C)以编程方式进行这种IAM访问,因此任何帮助将非常有用。

1 个答案:

答案 0 :(得分:1)

我认为AWS SDK iOS不提供此功能,因为GitHub上有一个未解决的未解决的开放问题。 [1]

相反,您可以使用服务的所谓 IAM查询API [2]直接查询服务。
AWS声明:

  

AWS提供的SDK包含用于各种编程语言和平台(Java,Ruby,.NET,iOS,Android等)的库和示例代码。 SDK提供了一种方便的方法来创建对IAM和AWS的编程访问。例如,SDK负责诸如加密签名请求(请参见下文),管理错误以及自动重试请求之类的任务。有关AWS开发工具包的信息,包括如何下载和安装它们,请参阅Amazon Web Services工具页面。

不幸的是,IAM服务未正式支持iOS SDK。这就是为什么IAM服务终结点未包含在iOS SDK中的原因。您可以尝试通过GitHub打开另一个功能请求...

如果您决定手动实施HTTP客户端和适当的请求签名,则可以使用上面提到的IAM命令(以AWS术语称为“操作”),例如ListUserPolicies操作[3]。

改进建议

  

然后我可以检查IAM策略中的“操作”字段,如果它允许“ s3:GetObject”或“ s3:”之类的权限,并且资源字段包含“ arn:aws:s3 ::: examplebucket /”或“ *”。如果两者均适用,则IAM用户有权使用S3“ examplebucket”。

如果您想要一种更强大的方法,我建议使用 IAM Policy Simulator API。 [4]

参考文献

[1] https://github.com/aws-amplify/aws-sdk-ios/issues/496
[2] https://docs.aws.amazon.com/IAM/latest/APIReference/Welcome.html
[3] https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUserPolicies.html
[4] https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html#policies-simulator-using-api