0

ユーザーが S3 アカウントを管理できるようにするプロジェクトを構築しようとしています。ただし、これを行うには、アクセス キーを手動で提供する必要があります。それは複雑ですが、私は彼らのためにそれを簡単にしたいと思っています.

ログイン情報を使用してアクセス キーを取得する方法はありますか?

解決策が PHP であることが望ましいのですが、それは義務ではありません。

ありがとう!

4

3 に答える 3

0

S3 バケットがアカウント内のユーザー用である場合

あなたが管理しているアカウントのユーザーに関連付けられたアクセス キーについて話している場合は、AWS Identity and Access Management / ListAccessKeysをご覧ください。

IAM [Identity and Access Management] は、AWS のお客様が AWS アカウントでユーザーとユーザー権限を管理できるようにするウェブ サービスです。

S3 バケットが所有していないアカウント用の場合

他の誰かの AWS アカウントに関連付けられたアクセス キーについて話している場合 (およびコメントごとにシークレット キー)、 AWS によると、AWS セキュリティ資格情報ページの [アクセス キー] タブからのみアクセス キーを取得できます。

アクセスキーは保護されたアカウントの秘密であるため、これは完全に理にかなっています。シークレットを取得するための API を提供しても意味がありません。

さらに、ユーザーが自分のアカウント資格情報を提供した場合、それはセキュリティ上の大きな問題になります。必要なAWSリソースをスピンアップでき、それらは責任を負います. 彼らがあなたがそれをしないと 100% 信頼していたとしても、そのログイン データのハッキングを許可すれば、ハッカーは同じことをする可能性があります。LinkedIn のログイン データがハッキングされる可能性がある場合、あなたもハッキングされる可能性があります。

于 2012-06-11T02:20:08.177 に答える
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 に答える
0

ユーザー名を指定すると、 ListAccessKeys API を使用してユーザーのアクセスキーを一覧表示できます。

しかし、あなたの問題には問題があるようです。上記の API を使用するには、アクセスキーとシークレットのペアでリクエストに署名する必要があります。そして、あなたのawsアカウントのユーザーと、少なくともs3とiamに対する完全な許可がない限り、他の人のためのツールを構築しているので、彼らが彼らを持っているとは思いません。

次に、これにより、シークレットではなくアクセスキーのみを取得できます。シークレットを要求することは、誰かに代わって何かを実行できるようにパスワードを要求するようなものです。したがって、API を介して aws からシークレットを取得することはできません。それを取得する唯一の方法は、ユーザーがそれを提供する場合です。

于 2012-06-11T02:20:53.387 に答える