关于 AWS IAM Role 的最佳实践

一、EC2

针对 EC2 上面的应用程序,不要分配 User Credentials,使用 IAM Role Attachment。
可以访问 EC2 的 meatdata 查看赋予的 Role 权限

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/

二、Software on local laptop

针对在自己电脑上面开发测试的用户,用户需要 S3 的访问权限,不给用户分配权限,这样可以避免 AK/SK 丢失造成的损失,我们可以给 User 分配一个 Cross accunt role,让用户使用接口 assume-role 获取临时的 AK/SK,然后去访问AWS 资源。

2.1、创建用户 alice

不给用户分配任何权限。

最后得到用户的 AK/SK

Access key ID :AKIA5NAGHF6N2WFTQZP6
Secret access key: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

2.2、创建一个跨账户 Role

给角色增加权限。

生成的 Role ARN:arn:aws:iam::921283538843:role/alice-sts

给 alice 赋予 assume role 的权限。

Policy 格式如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::921283538843:role/alice-sts"
        }
    ]
}

2.3、测试用户权限

直接使用 AK/SK,查看用户是否有相应的权限。
使用 aws configure 配置。

wangzan:~/.aws $ aws configure
AWS Access Key ID [****************H6YU]: AKIA5NAGHF6N2WFTQZP6
AWS Secret Access Key [****************bVA/]: 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
Default region name [us-east-1]:
Default output format [json]:
wangzan:~/.aws $ aws sts get-caller-identity
{
    "Account": "921283538843",
    "UserId": "AIDA5NAGHF6NZASTSA7Y6",
    "Arn": "arn:aws:iam::921283538843:user/alice"
}
wangzan:~/.aws $ aws s3 ls
An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied

直接使用是获取不到权限的,那我们使用 assume-role。

wangzan:~/.aws $ aws sts assume-role --role-arn arn:aws:iam::921283538843:role/alice-sts --role-session-name s3-access --external-id alice
{
    "AssumedRoleUser": {
        "AssumedRoleId": "AROA5NAGHF6NSZZVCDMHE:s3-access",
        "Arn": "arn:aws:sts::921283538843:assumed-role/alice-sts/s3-access"
    },
    "Credentials": {
        "SecretAccessKey": "sJuL4gzx6ScdloJyyO6J4mCnFdtMcFm/uAPVjOz7",
        "SessionToken": "IQoJb3JpZ2luX2VjECMaCXVzLWVhc3QtMSJHMEUCIGkmsQ250D6CqAQfsWxfMog5SYovpefP5jMS2+cOUexGAiEAnlNtMrdhtz60YEjEoCCHce3YVQOMTCXf2gAJf7RSv+Aq2QEIi///////////ARAAGgw5MjEyODM1Mzg4NDMiDE3ySalHbx1Bf97NjiqtAcmjLjLW8FsTQMkO1xBUFbREur7ZqtO/AGR2oG6AnZIUUXNr2RRcmE6+IQgArlMBzppC/Q2uAnPkbz1GIdMKohUbL+9d2eZIOBwr9Vs/43iFSuAsdiLa9C5HI3++keG+5IkjS/Yj9rP30p1Bj2JK6TlTUQnZtINf1im4PmoIrxotWXkJH6BU8kG7PJ3bOgFCRWeG8w3h/d3sCx4GqUmnKISKosHSBUidm6PJ41GNMMSul/AFOuMBB0LfECQaR+C8+uxpil5KRE0a5DDq+IPDWaPQIpQ+s5q4ewLpSfGKTwKTrDPk7Hi1R/vhuNKNNUcgSjzz5Wh4NwjkbGmddcFDvlZCv2rXIRMPbcM6i/bXTz3HbCX/f5K3bcubiIShpezfDm/00Iy+qGPzaqDLZ5XNkMZ9msXBVYYd0YS++wprPGpX5GQBKh/vqS4HPWCeqRRrHbKGQO3/ycMXjjeHKpY07WcXhM3lbDR583JDcLTsfItldFeC8y4aXMGugTLUwmQm9pihC/TxP13zjWl1rh/cgR4FGDFbosb1Bq0=",
        "Expiration": "2019-12-27T11:04:52Z",
        "AccessKeyId": "ASIA5NAGHF6NZJHS6VVN"
    }
}

然后去编辑 ~/.aws/credentials,把生成的Credentials放到里面,如下:

[default]
aws_access_key_id = ASIA5NAGHF6NZJHS6VVN
aws_secret_access_key = sJuL4gzx6ScdloJyyO6J4mCnFdtMcFm/uAPVjOz7
aws_session_token = IQoJb3JpZ2luX2VjECMaCXVzLWVhc3QtMSJHMEUCIGkmsQ250D6CqAQfsWxfMog5SYovpefP5jMS2+cOUexGAiEAnlNtMrdhtz60YEjEoCCHce3YVQOMTCXf2gAJf7RSv+Aq2QEIi///////////ARAAGgw5MjEyODM1Mzg4NDMiDE3ySalHbx1Bf97NjiqtAcmjLjLW8FsTQMkO1xBUFbREur7ZqtO/AGR2oG6AnZIUUXNr2RRcmE6+IQgArlMBzppC/Q2uAnPkbz1GIdMKohUbL+9d2eZIOBwr9Vs/43iFSuAsdiLa9C5HI3++keG+5IkjS/Yj9rP30p1Bj2JK6TlTUQnZtINf1im4PmoIrxotWXkJH6BU8kG7PJ3bOgFCRWeG8w3h/d3sCx4GqUmnKISKosHSBUidm6PJ41GNMMSul/AFOuMBB0LfECQaR+C8+uxpil5KRE0a5DDq+IPDWaPQIpQ+s5q4ewLpSfGKTwKTrDPk7Hi1R/vhuNKNNUcgSjzz5Wh4NwjkbGmddcFDvlZCv2rXIRMPbcM6i/bXTz3HbCX/f5K3bcubiIShpezfDm/00Iy+qGPzaqDLZ5XNkMZ9msXBVYYd0YS++wprPGpX5GQBKh/vqS4HPWCeqRRrHbKGQO3/ycMXjjeHKpY07WcXhM3lbDR583JDcLTsfItldFeC8y4aXMGugTLUwmQm9pihC/TxP13zjWl1rh/cgR4FGDFbosb1Bq0=

然后再去请求 S3。

wangzan:~/.aws $ aws sts get-caller-identity
{
    "Account": "921283538843",
    "UserId": "AROA5NAGHF6NSZZVCDMHE:s3-access",
    "Arn": "arn:aws:sts::921283538843:assumed-role/alice-sts/s3-access"
}

2.4、自动更换临时权限

修改 ~/.aws/credentials,出现了一点问题,我就把那个Role 里面的限制取消了,也就是那个 external-id。

[alice]
aws_access_key_id = AKIA5NAGHF6N2WFTQZP6
aws_secret_access_key = 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
aws_session_token =

[default]
role_arn = arn:aws:iam::921283538843:role/alice-sts
source_profile = alice

可以看下目前的 Role。

wangzan:~/.aws $ aws sts get-caller-identity
{
    "Account": "921283538843",
    "UserId": "AROA5NAGHF6NSZZVCDMHE:botocore-session-1577441862",
    "Arn": "arn:aws:sts::921283538843:assumed-role/alice-sts/botocore-session-1577441862"
}

原文地址:https://blog.51cto.com/wzlinux/2462544

时间: 2024-08-24 06:01:05

关于 AWS IAM Role 的最佳实践的相关文章

基于AWS的云服务架构最佳实践

ZZ from: http://blog.csdn.net/wireless_com/article/details/43305701 近年来,对于打造高度可扩展的应用程序,软件架构师们挖掘了若干相关理念,并以最佳实践的方式加以实施.在今天的"信息时代",这些理念更加适用于不断增长的数据集,不可预知的流量模式,以及快速响应时间的需求.本文将强调并重申其中的一些传统观念,并讨论他们如何在融合云计算的发展,还将讨论由于云计算的动态性而产生的一些前所未有的概念(如弹性). 本文的目标是面向云

AWS 架构最佳实践概述(十一)

AWS 架构最佳实践 AWS合理架构的框架支柱 安全性 - 保护并监控系统 能够保护信息.系统和资产 通过风险评估和缓解策略 可靠性 - 从故障中恢复并减少中断 从基础设施或服务故障中恢复 动态获取计算资源以满足需求 减少配置错误和暂时性网络问题来减少中断 绩效 - 谨慎使用资源 高效的使用计算资源以满足系统需求 在需求改变和技术发展时依旧保持效率 成本优化 - 消除不必要的费用 减少不必要的成本和次优资源 卓越操作 合理架构设计原则 停止猜想容量需求 - 传统环境存在浪费 在生产层面测试系统

《Ansible自动化运维:技术与最佳实践》图书已上架,欢迎大家阅读

本书由资深运维程师联手打造,通过大量实例,详细讲解Ansible这个自动化运维工具的基础原理和使用技巧:从基础的架构解析.安装配置,到典型应用案例分析,作者分享了自己在工作中的实战经验,为各类运维操作.运维开发人员提供了翔实的指南.本书主要内容包括:Ansible架构及安装,Ansible 组件.组件扩展.API,playbook详解,最佳实践案例分析,用ansible-vault保护敏感数据,Ansible与云计算的结合,部署Zabbix组件.Haproxy + LAMP架构,以及Ansibl

分布式服务框架下,如何做到服务化最佳实践?

“升级服务框架后,性能.可靠性等问题日益明显.服务化之后面临的诸多挑战,怎样分析才能给出实践最优解? 在服务化之前,业务通常都是本地API调用,本地方法调用性能损耗较小.服务化之后,服务提供者和消费者之间采用远程网络通信,增加了额外的性能损耗,业务调用的时延将增大,同时由于网络闪断等原因,分布式调用失败的风险也增大.如果服务框架没有足够的容错能力,业务失败率将会大幅提升. 除了性能.可靠性等问题,跨节点的事务一致性问题.分布式调用带来的故障定界困难.海量微服务运维成本增加等也是分布式服务框架必须

Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)

Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen,发布日期: 2014-05-17, 修改日期: 2014-05-18 在Django 1.6中的settings.py中可以修改130多项设置, 但大多数都继承自默认值. 设置是在web服务器启动时首次载入的, 服务器重启时重新载入, 因此, 程序员们应尽量避免修改正式服务器上使用的settings.py文件. 以下是一些我们

Hadoop MapReduce开发最佳实践(上篇)

body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}

用HAWQ轻松取代传统数据仓库(十七) —— 最佳实践

一.HAWQ参数配置最佳实践 (原文地址:http://hawq.incubator.apache.org/docs/userguide/2.1.0.0-incubating/bestpractices/config_hawq_bestpractices.html)        在$GPHOME/etc/hawq-site.xml文件中维护HAWQ的配置参数.该文件存在于所有HAWQ实例上,并可以通过Ambari或使用HAWQ命令行接口进行修改.使用一致的策略(Ambari或命令行接口)维护h

Google Web开发最佳实践(一)

这篇文章最初是在阿里通信前端团队的github博客(http://aliqin.github.io)上看到的,原文地址https://developers.google.com/web/fundamentals/(要翻墙).既然要去阿里了,就得先熟悉熟悉环境,既然是最佳实践,就得自己亲自实践一下. 1.创建网站的内容和结构 内容是任何网站最重要的部分.所以让我们为内容而设计,而不要让设计支配内容.在这个手册中,我们首先确定我们需要的内容,基于这个内容创建一个页面结构,然后在简单的线性布局里呈现页

hibernate 多对多 最佳实践

首先 看我们的 ER 图 :涵盖了  一对一 ,一对多 ,多对多 的关系 多对多 在 hibernate 中的 实现 :  一个 用户user ,拥有 多个角色 role: 一个 角色 属于 多个 用户user 其实 多对多 就 是双向的 一对多,我们使用一个 中间表 user_role 来保存 user ,role 的 主键,来 确定 它们的 关联关系, 减少 数据的低级冗余,提高 可扩展 性 User.java 及 映射文件 public class User implements java