我正在尝试构建一个项目来帮助用户管理他们的 S3 帐户。然而,要做到这一点,它需要他们手动向我提供他们的访问密钥。不过这很复杂,我想让他们更容易。
有没有办法通过使用他们的登录信息来检索他们的访问密钥?
如果解决方案是在 PHP 中,我会更喜欢,但这不是义务。
谢谢!
我正在尝试构建一个项目来帮助用户管理他们的 S3 帐户。然而,要做到这一点,它需要他们手动向我提供他们的访问密钥。不过这很复杂,我想让他们更容易。
有没有办法通过使用他们的登录信息来检索他们的访问密钥?
如果解决方案是在 PHP 中,我会更喜欢,但这不是义务。
谢谢!
如果 S3 存储桶适用于您账户中的用户
如果您谈论的是与您控制的账户中的用户关联的访问密钥,请查看AWS Identity and Access Management / ListAccessKeys。
IAM [身份和访问管理] 是一项 Web 服务,使 AWS 客户能够管理其 AWS 账户下的用户和用户权限
如果 S3 存储桶用于您不拥有的账户
如果您正在谈论与其他人的 AWS 账户关联的访问密钥(以及根据您的评论密钥),根据 AWS,您只能从 AWS 安全凭证页面上的访问密钥选项卡获取访问密钥。
这很有意义,因为访问密钥是受保护的帐户机密。提供一个 API 来检索秘密是没有意义的。
此外,如果用户向您提供了他们的帐户凭据,那将是一个巨大的安全问题。您可以启动任何您想要的 AWS 资源,他们将承担责任。即使他们 100% 相信你不会这样做,如果你允许登录数据被黑客入侵,黑客也可以这样做。如果LinkedIn 登录数据可能被黑客入侵,那么您也可能被黑客入侵。
给定用户名,您可以使用ListAccessKeys api 列出用户访问密钥。
但是您的问题似乎有问题。为了使用上述 api,您需要使用 accesskey - secret 对对请求进行签名。而且我认为您不会拥有他们,因为您正在为其他人构建工具,除非您的 aws 帐户中的用户和至少对 s3 和 iam 的完全权限。
然后再一次,这将允许您只获得访问密钥而不是他们的秘密。询问秘密就像询问某人的密码,以便您可以代表他们做某事。因此,您无法通过任何 api 从 aws 获取秘密,获取秘密的唯一方法是用户将其提供给您。
我找到了一种让它工作的方法。基本上,我已经建立了一个 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();
}
现在我只需要找到一种方法将用户信息安全地发送到这个脚本。
谢谢你们的帮助!