# 跨多账号收集CloudTrail日志

在本篇文章中，我将介绍如何设置跨账户收集 AWS CloudTrail 事件日志。如果不是构建了多账户管理方式则可以跳过此文内容。

## 基本概念

如果不了解这个基本概念对于后面的内容理解起来就会比较困难，建议先查看基本概念。

[组织，主账号和成员账号](https://aws-gcr-wwso-security.gitbook.io/an-quan-zui-jia-shi-jian/1.-iam-shen-fen-shi-bie-yu-fang-wen-kong-zhi/xin-shou-qi-bu/zu-zhi-guan-li-zhang-hu-he-cheng-yuan-zhang-hu)

[多账户管理](https://aws-gcr-wwso-security.gitbook.io/an-quan-zui-jia-shi-jian/multiple-accounts-duo-zhang-hao-guan-li)

## 假设前提

有多个AWS账户：dev，test，prod，security，management。为了对每个账户进行合规性审计，我们需要将日志集中存储到security账户中。Management是主账户，拥有最大的权限。

收集所有账户的 CloudTrail Logs到Account S（security-account），

Account A (dev-account),

Account B (test-account),&#x20;

Account C (prod-account),&#x20;

Account D (manage-account) 。

## 部署

1. 在Account S（security-account）创建一个S3存储桶，更改存储桶策略允许Account D (manage-account)写入文件。以下的示例存储桶策略实现的是允许账户只要在组织范围内，就可以读取和写入。your-organization-id可以从AWS Organizations这个服务中获取到，<https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html#orgs_view_org>

通过CLI命令可以获取出Organization ID：ID类似于"o-aa111bb222"

`$ aws organizations describe-organization`

`S3存储桶示例策略如下：`

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allowcloudtrailread",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "s3:Get*",
            "Resource": "arn:aws:s3:::<your-cloudtrail-bucket-name>",
            "Condition": {
                "StringEquals": {
                    "aws:SourceOrgID": "<your-organization-id>"
                }
            }
        },
        {
            "Sid": "allowcloudtraiwrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "s3:Put*",
            "Resource": "arn:aws:s3:::<bucket-name>/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceOrgID": "<your-organization-id>"
                }
            }
        }
    ]
}
```

2. 登录管理账户Account D，创建组织跟踪，并发送到CloudWatch Logs。创建跟踪（trail）的时候要注意勾选2个配置，一个是“为我组织中的所有账户启用”，另外一个是启用“CloudWatch Logs”，使用刚才在安全账号创建好的S3存储桶。其余配置根据需要进行设置。
   1. **“为我组织中的所有账户启用”**&#x53EF;以实现多个账户中cloudtrail的日志统一收集；
   2. **“CloudWatch Logs”启用**是实现安全告警通过邮件或者slack等方式发送的前提条件；
   3. 使用刚才在Account S（security-account）创建好的S3存储桶名称。

<figure><img src="https://3752289132-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LTfg4e0NhLEbwi6WFJp%2Fuploads%2Fg6rcdK8uXYHEYIVBWGXb%2FScreenshot%202024-06-27%20at%2015.02.19.png?alt=media&#x26;token=e04eb566-0aaf-4778-9a07-abb3a0858c68" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3752289132-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LTfg4e0NhLEbwi6WFJp%2Fuploads%2FknnidAHHrlYbQX2p9dY8%2FScreenshot%202024-06-27%20at%2015.04.24.png?alt=media&#x26;token=52f491c5-113f-47de-8118-9ce3072392b0" alt=""><figcaption></figcaption></figure>

3. 创建完成后即实现了跨多账号收集CloudTrail日志，并且可以通过CloudWatch触发安全告警。
