如何在AWS中使用IAM提供临时安全凭证

时间:2014-02-26 07:01:33

标签: amazon-ec2 amazon-iam

IAM有一个名为Simple Token Service (STS)的服务组件。它允许您通过SDK / API创建临时访问,以访问AWS资源,而无需创建专用凭据。这些STS令牌具有用户定义的生命周期,并且在那之后被销毁。人们使用此服务从Android / IOS应用程序等移动设备访问内容。

但我不知道如何使用这项服务。

感谢任何帮助或支持。

谢谢

2 个答案:

答案 0 :(得分:0)

STS和IAM齐头并进,使用起来非常简单。由于您没有提供用例,请允许我在编码之前解释一些事情。

注意:我在PHP中编码,SDK版本为3。

STS的想法是创建一些tokens,允许持有者在您(所有者或受让人)泄露您自己的凭据时执行某些操作。您将使用哪种类型的STS取决于您想要做什么。 Possible actions are listed here

  

E.g.1:通常,您使用AssumeRole进行跨帐户访问或   联邦。想象一下,您拥有多个帐户并需要访问   每个帐户中的资源。您可以在中创建长期凭据   每个帐户都可以访问这些资源。但是,管理所有这些   凭据并记住哪个帐户可以访问哪个帐户   耗时的。相反,您可以创建一组长期   一个帐户中的凭据,然后使用临时安全凭证   通过在这些帐户中担任角色来访问所有其他帐户。

     

例如:如果您想使用MFA进行保护,通常会使用GetSessionToken   对Amazon EC2 StopInstances等特定AWS API的编程调用。

我们假设您有一个IAM用户,并且您想为该用户创建许多临时凭证,每个凭据的时间范围 15分钟。然后你将编写以下代码:

$stsClient = \Aws\Laravel\AwsFacade::createClient('sts', array(
    'region' => 'us-east-1'
));

$awsTempCreds = $stsClient->getSessionToken(array(
    'DurationSeconds' => 900
));

注意事项:

  1. 由IAM用户创建的凭据在您指定的持续时间内有效,从900秒(15分钟)到最多129600秒(36小时),默认值为43200秒(12小时);使用帐户凭据创建的凭据范围为900秒(15分钟)到最长3600秒(1小时),默认值为1小时。
  2. 在上面的示例中,我使用$stsClient获取AWS Facade,这是Laravel框架的一部分。您可以通过传递凭据来掌握$stsClient。请阅读此installation guide,了解如何实例化$stsClient
  3. 由于STS是全局资源,即它不要求您位于特定区域,因此您必须始终将区域设置为us-east-1。如果您的区域设置为其他任何内容,则会出现 should be scoped to a valid region, not 'us-west-1' 等错误。
  4. 您的临时凭证数量没有限制。
  5. 这些凭据将具有SAME权限,Account/IAM来自这些凭据。
  6. 以上代码返回AWS账户或IAM用户的一组临时凭证。凭证包括访问密钥ID,秘密访问密钥和安全令牌,以及一些其他信息,如到期时间。

    您现在可以将这些临时凭证提供给其他人。让我们说我把这个给了我正巧使用Javascript API的朋友。他现在可以写这样的代码:

    <script>
    var accessKey = '<?php echo $credentials["AccessKeyId"] ?>';
    var accessToken = '<?php echo $credentials["SecretAccessKey"] ?>';
    var accessSessionToken = '<?php echo $credentials["SessionToken"] ?>';
    
    AWS.config.update({
        credentials: {
            accessKeyId: accessKey,
            secretAccessKey: accessToken,
            sessionToken: accessSessionToken
        },
        region: 'us-east-1'
    });
    
    var bucket = new AWS.S3();
    var file = fileChooser.files[0];
    var params = {Bucket: 'mybucket', Key: file.name, ContentType: file.type, Body: file};
    
    bucket.upload(params, function (err, data) {
        results.innerHTML = err ? 'ERROR!' : 'UPLOADED.';
    }).on('httpUploadProgress', function(evt) {
        console.log('Progress:', evt.loaded, '/', evt.total); 
    });
    </script>
    

    此脚本的作用是什么?

    1. 使用临时凭证创建新客户端。
    2. 使用mybucket将非常大的文件(超过100MB)上传到Multipart Upload
    3. 同样,只要临时凭证有权这样做,您就可以对任何AWS资源进行操作。希望这会有所帮助。

答案 1 :(得分:-1)

STS有点难以理解(需要实时阅读)。我会尝试(是的尝试!)尽可能简单地解释。如果您需要执行以下操作,该服务非常有用:

  1. S3上有一个存储桶。您要说100个用户要将文件上传到此存储桶。很明显,您不应将AWS密钥/秘密分发给所有人。这是STS。您可以使用STS允许这些用户在“限时”(例如1小时)内写入桶的“部分”(比如他们的google-id的文件夹)。您可以通过执行所需的设置(IAM,S3策略和STS-AssumeRoles)并向其发送URL(用于上载)来实现此目的。在这种情况下,您还可以使用Web Identity Federation通过Google / FB / Amazon.com对用户进行身份验证。因此,如果没有后端代码,则可以实现此工作流程。 Web Identity Federation Playground让您了解其工作原理。
  2. 您拥有AWS账户,并希望其他人(另一位AWS用户)帮助您管理此帐户。在这里,您再次授予其他用户对AWS资源的选定部分的限时访问权限,而无需共享密钥/密钥
  3. 假设您有一个DynamoDB设置,每个应用用户都有一行数据。在这里,您需要确保给定用户只能在他的数据行上写入而不能在其他行上写入。您可以使用STS来设置这样的内容。
  4. 这里有一个完整的例子: Web身份联合与移动应用程序:文章&amp;教程:亚马逊网络服务:http://aws.amazon.com/articles/4617974389850313

    更多阅读: 使用身份提供商为移动应用程序创建临时安全证书 - AWS Security Token Service:http://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingWIF.html