Amazon ec2 我如何在AWS中使用IAM提供临时安全Credentail

Amazon ec2 我如何在AWS中使用IAM提供临时安全Credentail,amazon-ec2,amazon-iam,Amazon Ec2,Amazon Iam,IAM有一个名为简单令牌服务(STS)的服务组件。它允许您通过SDK/API创建临时访问,以访问AWS资源,而无需创建专用凭据。这些STS令牌有一个用户定义的生命周期,这些令牌将在之后销毁。人们使用此服务访问来自移动设备(如Android/IOS应用程序)的内容 但我不知道如何使用这项服务 感谢您的任何帮助或支持 谢谢STS有点难理解(需要实时阅读)。我将尝试(是的,尝试!)尽可能简单地解释。如果您需要执行以下操作,该服务非常有用: <script> var accessKey =

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

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

感谢您的任何帮助或支持


谢谢

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

<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>
  • S3上有一个桶。您有100个用户希望将文件上载到此存储桶。很明显,您不应该将AWS密钥/机密分发给所有人。STS来了。您可以使用STS允许这些用户在“有限的时间”(比如说1小时)内写入存储桶的“部分”(比如通过他们的谷歌id写入文件夹)。您可以通过执行所需的设置(IAM、S3策略和STS AssumeRoles)并向他们发送URL(他们用来上传)来实现这一点。在这种情况下,您还可以使用Web身份联合来通过Google/FB/Amazon.com对用户进行身份验证。因此,没有后端代码,这个工作流是可以实现的。让您了解这是如何工作的
  • 您有一个AWS帐户,希望其他人(另一个AWS用户)帮助您管理此帐户。在这里,您再次向其他用户提供对AWS资源选定部分的有限时间访问权限,而无需共享密钥/机密
  • 假设您有一个DynamoDB设置,每个应用程序用户都有一行数据。在这里,您需要确保给定用户只能在其数据行上写入数据,而不能在其他行上写入数据。您可以使用STS来设置这样的内容
  • 下面是一个完整的示例: 使用移动应用程序的Web身份联合:文章和教程:Amazon Web服务:

    更多阅读:
    使用身份提供商为移动应用程序创建临时安全凭据-AWS安全令牌服务:

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

    注意:我用PHP编写代码,SDK版本为3。

    STS的想法是创建一些
    令牌
    ,它允许持有者在您(所有者或受让人)不损害您自己凭证的情况下执行某些操作。您将使用哪种类型的STS取决于您想做什么

    例1:通常,您使用
    假设角色
    进行跨账户访问或 联邦。假设您拥有多个帐户,并且需要访问 每个帐户中的资源。您可以在中创建长期凭据 每个帐户都可以访问这些资源。然而,管理所有这些 凭证,并记住谁可以访问哪个帐户 费时。相反,您可以创建一组长期 一个帐户中的凭据,然后使用临时安全凭据 通过在这些帐户中担任角色来访问所有其他帐户

    例2:通常,如果要使用MFA进行保护,可以使用
    GetSessionToken
    对特定AWS API(如Amazon EC2实例)的编程调用

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

    $stsClient = \Aws\Laravel\AwsFacade::createClient('sts', array(
        'region' => 'us-east-1'
    ));
    
    $awsTempCreds = $stsClient->getSessionToken(array(
        'DurationSeconds' => 900
    ));
    
    注意事项:

  • IAM用户创建的凭据在您指定的持续时间内有效,从900秒(15分钟)到129600秒(36小时),默认值为43200秒(12小时);使用帐户凭据创建的凭据的范围从900秒(15分钟)到3600秒(1小时),默认值为1小时
  • 在上面的示例中,我使用作为Laravel框架一部分的AWS Facade获取
    $stsClient
    。如何通过传递凭据获得
    $stsClient
    ,取决于您自己。阅读本文,了解如何实例化
    $stsClient
  • 由于
    STS
    是一种全球资源,即它不要求您位于特定区域,因此您必须始终将该区域设置为
    us-east-1
    。如果您的地区设置为其他任何地方,您将收到类似于
    的错误,应该将范围限定为有效地区,而不是“us-west-1”
  • 您的临时凭证数量没有限制
  • 这些凭据将具有与其派生的
    帐户/IAM
    相同的权限
  • 上述代码返回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>
    
    
    var accessKey='';
    var accessToken='';
    var accessSessionToken='';
    AWS.config.update({
    证书:{
    accessKeyId:accessKey,
    secretAccessKey:accessToken,
    sessionToken:accessSessionToken
    },
    地区:'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(参数、函数(错误、数据){
    results.innerHTML=err?'ERROR!':'UPLOADED';
    }).on('httpUploadProgress',函数(evt){
    log('Progress:',evt.loaded',/',evt.total);
    });
    
    此脚本的作用是什么?

  • 使用临时凭据创建新客户端
  • 上载一个非常大的文件(更多)