授予AWS资源访问第三方应用的权限

时间:2020-09-27 02:07:16

标签: authentication oauth-2.0 oauth authorization amazon-iam

我有一个用例,其中要求应用程序的用户授予对其AWS账户的临时访问权限。寻找Oauth风格的解决方案,将用户定向到AWS Auth界面并在成功进行身份验证后重定向回。在此过程中,用户授予对所需AWS资源的临时访问权。

最接近的用例: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html

但是我可能无法直接应用该解决方案。

1 个答案:

答案 0 :(得分:0)

您正在寻找的服务是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的服务,请执行以下操作:

AWS.config.update({
    region: "us-east-1",
    credentials: new AWS.Credentials('AccessKeyId', 'SecretAccessKey', 'SessionToken')
});

要访问帐户B的服务,请执行以下操作:

  • 按照上述步骤设置AccountA凭据。
  • Assume AccountB Role并从中获取临时凭据。
  • 设置这些凭据以访问AccountB服务。

此解决方案可以扩展到任意数量的帐户。