【问题标题】:Granting AWS resources access to a third party app授予 AWS 资源对第三方应用程序的访问权限
【发布时间】:2020-09-27 02:07:16
【问题描述】:

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

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

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

【问题讨论】:

  • IAM 角色并不是这个用例的最佳选择。看看 Cognito,这就是服务。
  • 是的,Cognito 身份池将允许用户访问我的 AWS 账户服务。但是,用户必须授予对其服务的访问权限。

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


【解决方案1】:

您正在寻找的服务是 Cognito 身份池。它们可以与许多 OAuth 提供商集成,并用于临时访问多个 AWS 服务,例如DynamoDB、S3 等

您可以查看this tutorial 以进一步了解它的工作原理。 Cognito 用户池不是必需的,可以由任何其他 IdP 或 SSO(如 Auth0、Okta、FB 等)替换。

假设您想从多个帐户访问服务,例如账户 A 和账户 B。如果 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')
});

访问 AccountB 的服务:

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

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

【讨论】:

  • 是的,Cognito 身份池将允许用户访问我的 AWS 账户服务。但是,用户必须授予对其服务的访问权限。
  • his services 是什么意思?请你解释一下..
  • "his service" => 来自用户 AWS 账户的 AWS 资源。与托管 APP 的帐户不同。
  • @Ar034,感谢您的澄清。我添加了一个详细的解决方案来处理这种情况。
  • Amsh,感谢您提供详细描述的解决方案,是的,这就是我现在正在使用的解决方案。但是,我正在寻找类似于 OAuth 2.0 的解决方案,在该解决方案中,用户会自动重定向到提供者进行授权和身份验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
相关资源
最近更新 更多