如何有效管理多个 AWS 账户中的 AWS 资源?目前,我想要:
- 获取 EC2、RDS 等资源列表。
- 执行基本操作,例如重启/启动/停止实例
- 安排在办公时间后停止实例并在办公时间内启动 - 目前我有一个 CloudWatch 事件触发实例的停止/启动
我应该探索什么服务?对于所有这些任务,我已在 1 个 AWS 账户上成功实施。
我使用 AWS SDK 获取资源列表并对这些资源执行操作。但挑战在于 Lambda,我认为要做到这一点,我需要安装这些函数以及所有区域的所有账户的所有 CloudWatch 警报?有没有更好的方法?
AWS Organizations 会解决这个问题吗?我的账户目前是普通的 AWS 根账户
我正在探索使用 CloudFormation 将这些 Lambda 函数部署到所有账户和区域。这是最有效的方法吗?还有更好的选择吗?有些地区不支持 Lambda,这意味着我的跟踪仅适用于支持它的区域。
答案1
您可以尝试使用 IAM 角色在多个 AWS 账户之间委派访问权限。假设您有一个 lambda 函数,用于在办公时间之后/期间停止/启动 EC2 实例。这意味着您可以在一个 master
账户(您的1 个 AWS 账户) 并调用其他managed
账户中的 AWS API。在master
账户中,您已部署函数及其 IAMmaster
执行角色。此角色允许函数承担managed
部署在账户中的另一个角色managed
以调用相应的 AWS API,例如 boto3 ec2 客户端 stop_instances 或 start_instances 方法。IAMmanaged
角色允许调用managed
账户中的 AWS API,并且该函数可以承担该角色。
IAM 角色的简洁示例(AWS CloudFormation 片段):
"MasterRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"RoleName": "master_role",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
},
"Path": "/",
"Policies": [
{
"PolicyName": "master_assume_policy",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"*"
]
}
]
}
},
...
。
"AccountRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"RoleName": "managed_role",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": ">>> ARN_OF_MASTER_ROLE <<<"
},
"Action": "sts:AssumeRole"
}
]
},
"Path": "/",
"Policies": [
{
"PolicyName": "managed_ec2_policy",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:StopInstances",
"ec2:StartInstances",
...
您还需要managed
通过从 lambda 函数调用AssumeRole
API 切换到 IAM 角色。有一个不错的文档可描述此过程。总之,您需要managed
通过 STS 承担 IAM 角色,它将返回调用 API 所需的凭据。
以下链接可能有助于您了解 IAM 跨账户委派:
关于 AWS Organizations,我认为它可以帮助您以更集中的方式管理 managed
账户。您可以创建 SCP 或服务控制策略,以集中控制从managed
账户访问 AWS 服务的级别。该策略指定用户和角色可以在账户中使用的服务和操作。您还可以managed
使用 CloudFormation 自动创建 AWS 账户并根据需要进行配置。这可能包括创建 IAM 用户、角色、策略等。AWS 博客上有一篇关于它的好文章: