如何解决授予AWS资源访问第三方应用的权限
我有一个用例,其中要求应用程序的用户授予对其AWS账户的临时访问权限。寻找Oauth风格的解决方案,将用户定向到AWS Auth界面并在成功进行身份验证后重定向回。在此过程中,用户授予对所需AWS资源的临时访问权。
最接近的用例: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html
但是我可能无法直接应用该解决方案。
解决方法
您正在寻找的服务是Cognito身份池。它们可以与许多OAuth提供程序集成,并用于获得对多个AWS服务的临时访问权,例如DynamoDB,S3等。
您可以研究this tutorial以获得有关其工作原理的更多信息。不需要Cognito用户池,并且可以用其他任何IdP或SSO(例如Auth0,Okta,FB等)替换。
假设您要从多个帐户访问服务,例如AccountA和AccountB。如果AccountA具有Cognito身份池,则必须执行以下步骤:
- 在AccountB中创建一个IAM角色,并添加对要在应用程序中访问的服务的访问权限。您将必须使用
Another AWS account
选项创建它,并提供AccountA的AccountID。 - 在AccountA中,创建一个IAM角色,该角色允许从当前帐户访问服务,并将该角色附加到您的Cognito身份池中。 More details here。
- 将此策略添加到AccountA角色,以便它可以承担AccountB的角色。
{
"Version": "2012-10-17","Statement": {
"Effect": "Allow","Action": "sts:AssumeRole","Resource": "arn:aws:iam::AccountB_ID:role/account_b_role"
}
}
要访问AccountA的服务,请执行以下操作:
- 简单地get temporary credentials from Cognito Identity合并并在SDK中将它们用作:
AWS.config.update({
region: "us-east-1",credentials: new AWS.Credentials('AccessKeyId','SecretAccessKey','SessionToken')
});
要访问帐户B的服务,请执行以下操作:
- 按照上述步骤设置AccountA凭据。
- Assume AccountB Role并从中获取临时凭据。
- 设置这些凭据以访问AccountB服务。
此解决方案可以扩展到任意数量的帐户。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。