跨账户资源和Amazon AppStream 2.0

时间:2021-07-15 | 标签: | 作者:Q8 | 来源:Ali Othman网络

小提示:您能找到这篇{跨账户资源和Amazon AppStream 2.0}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的跨账户资源和Amazon AppStream 2.0内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您!

< ">我们的一些使用Amazon AppStream 2.0的客户利用多账户设置来分离其AppStream 2.0资源。对于这些客户,他们选择将AppStream 2.0资源分成多个帐户的原因很多。但是,我们客户这样做的最常见原因是资源和账单隔离以及增强的安全性。例如,每个业务部门,外部客户或部署环境可能需要拥有自己的AWS账户,每个账户都具有自己的,唯一配置的AppStream 2.0环境。

< ">在此博客文章中,我向您展示如何创建基本的多帐户AppStream 2.0部署。我们将在一个AWS账户中创建一个AWS Lambda函数,该函数从两个AWS账户之一中的堆栈和队列中生成一个AppStream 2.0流URL,具体取决于提交的电子邮件地址。

先决条件

< ">此博客中的三个AWS账户分别称为账户A,账户B和账户C

< ">帐户B和C中的AppStream 2.0堆栈和队列

创建和配置帐户B和C中的IAM角色角色

< ">在帐户B中,打开IAM控制台。这应该是包含您的AppStream 2.0堆栈和队列的帐户。

< ">打开IAM控制台,然后依次选择“策略”,“创建策略”。

< ">选择JSON标签。将以下JSON策略复制并粘贴到策略文档框中:



{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Action": "appstream:CreateStreamingURL",

            "Resource": [

                "arn:aws:appstream:<region>:<Account_B-AWS-Account-ID>:fleet/<Fleet-Name>",

                "arn:aws:appstream:<region>:<Account_B-AWS-Account-ID>:stack/<Stack-Name>"

            ]

        }

    ]

}

< ">在JSON政策中,替换为:

< ">  -占位符&lt;Account_B-AWS-Account-ID&gt;,具有账户B的AWS账户ID

< ">  -AppStream 2.0队列和堆栈的占位符&lt;Fleet-Name&gt;和&lt;Stack-Name&gt;

< ">  -AppStream 2.0资源所在的占位符&lt;region&gt;。

< ">选择审核政策。

< ">为您的策略命名,然后选择创建策略。

< ">在导航窗格中,选择Roles,Create Role,然后配置以下框:

< ">  -对于“选择受信任实体的类型”,选择另一个AWS账户。

< ">  -输入账户A的AWS账户ID

< ">选择下一步:权限。

< ">在“筛选器策略”搜索框中,搜索您先前创建的策略。当策略出现在列表中时,选中策略名称旁边的复选框。

< ">选择下一步:标签。尽管可以为策略指定标签,但是标签是可选的。

< ">选择下一步:查看。为您的角色命名,然后选择创建角色。

< ">在账户C中重复步骤1-9,使用AWS Region和AppStream 2.0堆栈以及账户C的Fleet ARN更新IAM策略

< ">在帐户A中创建和配置IAM角色

< ">在帐户A中,打开IAM控制台,这是包含Lambda函数的帐户。

< ">打开IAM控制台,然后依次选择“策略”,“创建策略”。

< ">选择JSON标签。将以下JSON策略复制并粘贴到策略文档框中:

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Action": [

                "logs:CreateLogStream",

                "去做电商运营的工作logs:CreateLogGroup",

                "logs:PutLogEvents"

            ],

            "Resource": "*"

        },

        {

            "Effect": "Allow",

            "Action": "sts:AssumeRole",

            "Resource": "arn:aws:iam::<Account_B-AWS-Account-ID>:role/<Role-Name>"

        },

        {

            "Effect": "Allow",

            "Action": "sts:AssumeRole",

            "Resource": "arn:aws:iam::<Account_C-AWS-Account-ID>:role/<Role-Name>"

        }

    ]

}

< ">使用您在帐户B和C中创建的角色的ARN更新策略。

< ">创建策略后,在导航窗格中选择Roles,Create Role,然后配置以下框:

< ">  -对于“选择可信实体的类型”,选择“AWS服务”。

< ">  -对于将使用此角色的服务,请选择Lambda。

< ">选择下一步:权限。

< ">在“筛选器策略”搜索框中,搜索您先前创建的策略。当策略出现在列表中时,选中策略名称旁边的复选框。

< ">选择下一步:标签。尽管可以为策略指定标签,但是标签是可选的。

< ">选择下一步:查看。为您的角色命名,然后选择创建角色。

< ">在帐户A中创建Lambda函数

< ">在帐户A中,打开Lambda控制台。

< ">选择创建功能。

< ">在“创建功能”页面上,从头开始选择“作者”。

< ">在“基本信息”下,执行以下操作:

< ">  -命名您的功能。

< ">  -对于Runtime,选择Node.js12.X。

< ">在“权限”下,选择“选择或创建执行角色”旁边的图标。然后执行以下操作:

< ">  -对于执行角色,选择使用现有角色。

< ">  -对于“现有角色”,选择先前创建的Lambda执行角色。

< ">选择创建功能。

< ">在“功能代码”部分中,将以下代码复制并粘贴到选项卡上:

const AWS = require('aws-sdk');

const crypto = require('crypto');


const sts = new AWS.STS();


exports.handler = (event, context, callback) => {


    var eventdata = JSON.parse(event.body);

    var email = eventdata.email;


    if (email.includes("example.com")) { //replace with the domain you want to route to Account B's AS2 stack and fleet

        var sts_params = {

            RoleArn: "arn:aws:iam::<AWS-Account-ID-For-Account-B>:role/<Role-Name-From-Account-B>", //ARN from role created in Account B

            RoleSessionName: "<Any-String>", //Replace with any string

            DurationSeconds: 900

    

        };

        var as2region = "<Region>"; //Region where AS2 Stack and Fleet are located in Account B

        var as2stack = "<Stack-Name-From-Account-B>"; //Stack Name from account B

        var as2fleet = "<Fleet-Name-From-Account-B>"; //Fleet Name from account B

        

    }

    else if (email.includes("example-1.com")) { //replace with the domain you want to route to Account C's AS2 stack and fleet

        var sts_params = {

            RoleArn: "arn:aws:iam::<AWS-Account-ID-For-Account-C>:role/<Role-Name-From-Account-C>", //ARN from role created in Account C

            RoleSessionName: "<Any-String>", //Replace with any string

            DurationSeconds: 900

    

        };



        var as2region = "<Region>"; //Region where AS2 Stack and Fleet are located in Account C

        var as2stack =报纸广告营销 "<Stack-Name-From-Account-C>"; //Stack Name from account C

        var as2fleet = "<Fleet-Name-From-Account-C>"; //Fleet Name from account C

        

    }

    else{

        console.log("No matching domain. Email address is " + email);

        errorResponse('Email domain does not match!', context.awsRequestId, callback);

        process.exit(0)


    }


    sts.assumeRole(sts_params, function (err, data) {

        if (err) {

            console.log(err, err.stack);

            errorResponse('Error assuming role!', context.awsRequestId, callback);

        } else {

            console.log(data);


            var unlength = 16;

            var username = crypto.randomBytes(Math.ceil(unlength / 2)).toString('hex').slice(0, unlength);


            console.log("username: " + username);


            var as2_params = {

                FleetName: as2fleet,

                StackName: as2stack,

                UserId: username,

                Validity: 5

            };


            AWS.config.credentials = new AWS.TemporaryCredentials({ RoleArn: sts_params.RoleArn });

            AWS.config.update({ region: as2region }); 


            const appstream = new AWS.AppStream;


            var request = appstream.createStreamingURL(as2_params);

            request.

                on('success', function (response) {

                    console.log("Success! AS2 Streaming URL created.");

                    var output = response.data;

                    var url = output.StreamingURL;

                    callback(null, {

                        statusCode: 201,

                        body: JSON.stringify({

                            Message: url,

                            Reference: context.awsRequestId,

                        }),

                        headers: {

                            'Access-Control-Allow-Origin': '*',

                        },

                    });

                }).

                on('error', function (response) {

                    console.log("er新闻媒体邀约ror: " + JSON.stringify(response.message));

                    errorResponse('Error creating AS2 streaming URL.', context.awsRequestId, callback);


                }).

                send();


        }

    });


};


function errorResponse(errorMessage, awsRequestId, callback) {

    callback(null, {

        statusCode: 500,

        body: JSON.stringify({

            Error: errorMessage,

            Reference: awsRequestId,

        }),

        headers: {

            'Access-Control-Allow-Origin': '*',

        },

    });

}

< ">替换所有占位符值。

< ">保存功能。

< ">测试您的设置

< ">在帐户A中,打开Lambda控制台。

< ">选择之前创建的Lambda函数

< ">在“选择测试事件”下拉菜单中,选择“配置测试事件”。

< ">在“配置测试事件”窗口中,使用以下设置配置事件:

< ">  -活动模板应为“Hello World”

< ">  -为活动命名

< ">  -将JSON块替换为以下内容:{"body":"{"email":"test example.com"}"}

< ">  -将示例电子邮件地址替换为包含您要过滤的域之一的电子邮件地址

< ">创建活动

< ">创建事件后,选择“测试”按钮以开始测试

< ">如果测试成功,则应该返回一个AppStream 2.0流URL

< ">在网络浏览器中复制并粘贴该URL以验证其功能

< ">使用其他电子邮件域重新配置测试事件,然后重复测试过程

< ">清理

< ">删除您在帐户A中创建的Lambda函数

< ">删除您在帐户A中创建的IAM角色

< ">删除您在帐户B和C中创建的IAM角色

< ">可选:删除帐户B和C中的AppStream 2.0堆栈和队列

< ">结论

< ">就是这样!现在,您具有AppStream 2.0的多帐户设置。我们的ISV Workshop Series提供有关如何利用Amazon S3,API Gateway和Lambda创建AppStream 2.0流Web门户的教程。您可能需要考虑使用新的Lambda功能修改其中一个研讨会,以便您的用户可以从此多帐户部署中开始流式传输。

跨账户资源和Amazon AppStream 2.0

上一篇:shopee运营推广攻略
下一篇:Inmagine Group迁移到AWS以支持增长并提高运营效率


版权声明:以上主题为“跨账户资源和Amazon AppStream 2.0"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
推荐内容
扫码咨询
    跨账户资源和Amazon AppStream 2.0
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“跨账户资源和Amazon AppStream 2.0”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通跨账户资源和Amazon AppStream 2.0的相关事宜。

关键词:跨账户资源和Amazon,AppStr

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:sales@1330.com.cn
电话:400-021-1330 | 客服QQ:865612759
沪ICP备12034177号 | 沪公网安备31010702002418号