0

我正在尝试构建一个项目来帮助用户管理他们的 S3 帐户。然而,要做到这一点,它需要他们手动向我提供他们的访问密钥。不过这很复杂,我想让他们更容易。

有没有办法通过使用他们的登录信息来检索他们的访问密钥?

如果解决方案是在 PHP 中,我会更喜欢,但这不是义务。

谢谢!

4

3 回答 3

0

如果 S3 存储桶适用于您账户中的用户

如果您谈论的是与您控制的账户中的用户关联的访问密钥,请查看AWS Identity and Access Management / ListAccessKeys

IAM [身份和访问管理] 是一项 Web 服务,使 AWS 客户能够管理其 AWS 账户下的用户和用户权限

如果 S3 存储桶用于您不拥有的账户

如果您正在谈论与其他人的 AWS 账户关联的访问密钥(以及根据您的评论密钥),根据 AWS,您只能从 AWS 安全凭证页面上的访问密钥选项卡获取访问密钥。

这很有意义,因为访问密钥是受保护的帐户机密。提供一个 API 来检索秘密是没有意义的。

此外,如果用户向您提供了他们的帐户凭据,那将是一个巨大的安全问题。您可以启动任何您想要的 AWS 资源,他们将承担责任。即使他们 100% 相信你不会这样做,如果你允许登录数据被黑客入​​侵,黑客也可以这样做。如果LinkedIn 登录数据可能被黑客入侵,那么您也可能被黑客入侵。

于 2012-06-11T02:20:08.177 回答
0

给定用户名,您可以使用ListAccessKeys api 列出用户访问密钥。

但是您的问题似乎有问题。为了使用上述 api,您需要使用 accesskey - secret 对对请求进行签名。而且我认为您不会拥有他们,因为您正在为其他人构建工具,除非您的 aws 帐户中的用户和至少对 s3 和 iam 的完全权限。

然后再一次,这将允许您只获得访问密钥而不是他们的秘密。询问秘密就像询问某人的密码,以便您可以代表他们做某事。因此,您无法通过任何 api 从 aws 获取秘密,获取秘密的唯一方法是用户将其提供给您。

于 2012-06-11T02:20:53.387 回答
0

我找到了一种让它工作的方法。基本上,我已经建立了一个 Selenium Webdriver 服务器并下载了所有需要的 C# 文件。然后我创建了这个小脚本:

    static void Main(string[] args)
    {
        IWebDriver driver;
        driver = new FirefoxDriver();

        driver.Navigate().GoToUrl("https://aws-portal.amazon.com/gp/aws/securityCredentials");
        driver.FindElement(By.Id("ap_email")).Clear();
        driver.FindElement(By.Id("ap_email")).SendKeys("USER@EMAILACCOUNT.COM");
        driver.FindElement(By.Id("ap_password")).Clear();
        driver.FindElement(By.Id("ap_password")).SendKeys("HISPASSWORD");
        driver.FindElement(By.Id("signInSubmit")).Click();

        IList<IWebElement> keys = driver.FindElements(By.LinkText("Show"));
        int nbElems = keys.Count;
        System.Console.WriteLine(nbElems+" keys");
        foreach (IWebElement k in keys)
        {
            String toparse = k.GetAttribute("href");
            Regex regex = new Regex(@"'(?<key>.*)','(?<secret>.*)'");

            GroupCollection groups = regex.Match(toparse).Groups;

            System.Console.WriteLine(groups["key"] + " " + groups["secret"]);
        }

        driver.FindElement(By.LinkText("Sign Out")).Click();
        driver.Quit();
    }

现在我只需要找到一种方法将用户信息安全地发送到这个脚本。

谢谢你们的帮助!

于 2012-06-11T03:56:39.370 回答