# 委派代理管理账户管理config

本文介绍如何使用AWS Organizations集中管理AWS Config的跨账户配置

### 前提条件

使用管理账户，或者也叫payer账户，只有管理账户才能够开启组织级别的config。

首先确保您已经设置了AWS Organizations：

```bash
# 检查Organizations状态
aws organizations describe-organization
```

### 1. 创建允许整个组织写入的S3存储桶

```
# 创建S3存储桶用于Config数据，注意修改存储桶的名称和存储桶的region
aws s3 mb s3://your-config-bucket-name --region us-east-1

# 设置存储桶策略允许Config写入
aws s3api put-bucket-policy \
    --bucket your-config-bucket-name \
    --policy file://config-bucket-policy.json
```

存储桶策略示例 (config-bucket-policy.json)：

organizationID替换成你自己的组织ID；

your-config-bucket-name替换成你的config存储桶名称。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AWSConfigBucketPermissionsCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "config.amazonaws.com"
            },
            "Action": [
                "s3:GetBucketAcl",
                "s3:ListBucket",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::your-config-bucket-name",
                "arn:aws:s3:::your-config-bucket-name/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceOrgID": "o-organizationID"
                }
            }
        }
    ]
}
```

### 2. 启用 AWS Config 对 AWS Organizations 的访问

从您的组织管理帐户运行以下命令：

```
aws organizations enable-aws-service-access --service-principal=config.amazonaws.com
```

使用以下命令验证 enable-aws-service-access 命令是否完成：

```
aws organizations list-aws-service-access-for-organization
```

在 EnabledServicePrincipals 下，您应该看到 **config.amazonaws.com** 。

### 4. 为 AWS Config 注册委派管理员账户

要从非管理账户设置聚合器，您必须注册一个委托管理员账户，该账户是您组织的成员账户。从主账户中，使用 [RegisterDelegatedAdministrator](https://docs.aws.amazon.com/organizations/latest/APIReference/API_RegisterDelegatedAdministrator.html) 操作注册委托管理员。在以下 AWS CLI 命令中，将 MemberAccountID 替换为相应的委托管理员账户 ID。

{% code overflow="wrap" %}

```bash
aws organizations register-delegated-administrator --service-principal config.amazonaws.com --account-id MemberAccountID
```

{% endcode %}

**注意** ：管理账户可以为 AWS Config（config.amazonaws.com）分配的委派管理员的最大数量为 3。

运行以下命令来验证委派管理员是否已从管理帐户成功注册：

{% code overflow="wrap" %}

```bash
aws organizations list-delegated-administrators --service-principal=config.amazonaws.com
```

{% endcode %}

您应该看到类似以下内容的输出：

```json

{
    "DelegatedAdministrators": [
        {
            "Id": "MemberAccountID",
            "Arn": "arn:aws:organizations::MemeberAccountID:account/o-**********/DelegatedAdministratorAccountID",
            "Email": "Email_ID_MemberAccount",
            "Name": "name",
            "Status": "ACTIVE",
            "JoinedMethod": "INVITED",
            "JoinedTimestamp": 1604867734.48,
            "DelegationEnabledDate": 1607020986.801
        }
    ]
}
```

### 3. 使用委派管理员账户设置聚合器

前面的部分配置好以后就可以使用委派的账户设置config的聚合器了。

{% hint style="warning" %}
需要注意的是，虽然聚合配置好了，但是并不意味着所有组织内的其他账户都开启了config，能够看到config检查的结果了，需要每个账户每个region开启config才可以。也可以通过使用AWS Systems Manager Quick Setup批量开启config：<https://aws.amazon.com/blogs/mt/managing-configuration-compliance-across-your-organization-with-aws-systems-manager-quick-setup/>
{% endhint %}

```bash
# 创建交付通道
aws configservice put-delivery-channel \
    --delivery-channel name=default,s3BucketName=your-config-bucket-name \
    --region us-east-1

# 创建配置记录器
aws configservice put-configuration-recorder \
    --configuration-recorder name=default,roleARN=arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig,recordingGroup='{allSupported=true,includeGlobalResourceTypes=true}' \
    --region us-east-1

# 启动配置记录器
aws configservice start-configuration-recorder \
    --configuration-recorder-name default \
    --region us-east-1
    
# 创建组织聚合器收集所有成员账户数据
aws configservice put-configuration-aggregator \
    --configuration-aggregator-name OrganizationConfigAggregator \
    --organization-aggregation-source '{
        "RoleArn": "arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig",
        "AwsRegions": ["us-east-1", "us-west-2"],
        "AllAwsRegions": false
    }' \
    --region us-east-1
    
```

### 4. 验证部署

```bash
# 检查聚合器状态
aws configservice describe-configuration-aggregators \
    --configuration-aggregator-names OrganizationConfigAggregator


# 查看合规性摘要
aws configservice get-aggregate-compliance-summary \
    --configuration-aggregator-name OrganizationConfigAggregator
```

###

参考资料

<https://aws.amazon.com/blogs/mt/org-aggregator-delegated-admin/>
