如何为来自多个账户的会话管理器日志记录配置中央 Amazon S3 桶?

3 分钟阅读
0

我想为我的 AWS 账户配置会话管理器的中央 Amazon Simple Storage Service(Amazon S3)日志记录,该日志记录为 AWS Systems Manager 的一项功能。

简短描述

在 Systems Manager 中,您可以识别和配置会话管理器的 Amazon S3 日志记录

入门

AWS Systems Manager Agent(SSM Agent)使用相同的 AWS Identity and Access Management(IAM)角色来激活自己并将日志上传到 Amazon S3。您可以使用附加到 Amazon Elastic Compute Cloud(Amazon EC2)实例的 IAM 实例配置文件,也可以使用为默认主机管理配置配置的 IAM 角色。

您必须具有以下权限才能完成配置:

  • 拥有用于获得权限的 IAM 主体的账户必须通过 IAM 策略授予 Amazon S3 权限。
  • S3 桶的所有者还必须通过桶策略或访问控制列表(ACL)向所有账户授予权限。
  • 如果桶是使用 AWS Key Management Service(AWS KMS)密钥加密的,则必须创建和使用 IAM 策略。

注意:

  • 您必须将 IAM 策略附加到授予 SSM Agent 权限的角色。
  • 用于加密桶的 KMS 密钥还必须通过 KMS 密钥策略授予权限。

要为会话管理器配置中央 Amazon S3 桶日志记录,请首先确定拥有您的集中式 S3 桶的主账户。在以下示例中,账户 A 拥有集中式桶。

然后完成以下步骤:

  1. 在账户 A 中,创建一个或两个自定义 AWS KMS 密钥和一个自定义 KMS 策略。
  2. 在账户 A 中,为 Systems Manager 日志创建一个 S3 桶。
  3. 在账户 A 中,为 S3 桶创建资源策略。
  4. 在另一个账户中创建 IAM 策略,以授予对 S3 桶和两个 KMS 密钥的权限。
  5. (可选)使用会话管理器 Shell 配置文件创建和配置日志记录。
  6. 验证会话管理器日志记录是否已配置到目标桶,并且正在使用 KMS 密钥。
  7. 验证桶中是否正在生成日志。

解决方法

**注意:**为了确定权限范围,以下示例过程使用角色和 AWS Organizations 的条件键。如果您需要额外的权限控制,最佳做法是在会话管理器中使用主体角色

此过程使用以下密钥权限:

  • 提供系统管理员权限的 IAM AWS 托管式策略 AmazonSSMManagedInstanceCore
  • 描述 S3 桶上的加密配置的 s3:GetEncryptionConfiguration 权限。
  • 将加密对象放入 S3 桶的 s3:PutObjects3:PutObjectAcl 权限。
  • 在访问桶和会话管理器时提供 KMS 密钥访问权限的 kms:Decryptkms:GenerateDataKey 权限。
  • 允许对任何与 Organizations ID 不匹配的主体进行限制访问的 aws:PrincipalOrgID: o-xxxxxxx 权限。

先决条件

必须连接到以下服务的端点:

  • Amazon S3
  • AWS KMS
  • Systems Manager 和 Systems Manager 消息
  • Amazon EC2 消息

创建 KMS 密钥

首先,创建一个或两个密钥

  • 如果您要创建一个密钥,则在会话管理器日志桶和会话管理器首选项 KMS 加密上使用该密钥(密钥 1)进行 S3 加密。
  • 如果您要创建两个密钥,则使用第一个 KMS 密钥(密钥 1)对 S3 桶进行加密,以便进行日志记录。使用第二个 KMS 密钥(密钥 2)将会话管理器流加密到 Amazon S3 桶。

然后,为每个密钥创建密钥 Sid。请务必在每个密钥的 KMS 策略中添加 Sid 元素。

要允许会话管理器加密会话,请向组织添加以下权限:

**注意:**将 aws:PrincipalOrgID 值替换为您的 Organizations ID 和主体 ARN。

{  
    "Effect": "Allow",  
    "Principal": {  
        "AWS": "*"  
    },  
    "Action": [  
        "kms:Decrypt",  
        "kms:GenerateDataKey"  
    ],  
    "Resource": "*",  
    "Condition": {  
        "StringEquals": {  
            "aws:PrincipalOrgID": "o-xxxxxxx"  
        }  
    }  
}

创建用于登录账户 A 的 S3 桶

在账户 A 中创建用于记录会话管理器数据的 Amazon S3 桶。确保命名该桶,例如 customer_session_manager_logging_bucket。选择加密时,请使用密钥 1。

为 S3 桶创建资源策略

将以下资源策略应用于用于记录会话的桶。

要使用 PrincipalOrgId 的条件键来限制对 S3 桶的访问权限,请将以下资源策略添加到您的 S3 桶:

**注意:**此策略拒绝来自组织外部的委托人的访问请求。

{  
    "Version": "2012-10-17",  
    "Statement": [  
        {  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": "*"  
            },  
            "Action": "s3:GetEncryptionConfiguration",  
            "Resource": "arn:aws:s3:::customer_session_manager_logging_bucket",  
            "Condition": {  
                "StringEquals": {  
                    "aws:PrincipalOrgID": "o-xxxxxxxxxxxxxx"  
                }  
            }  
        },  
        {  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": "*"  
            },  
            "Action": [  
                "s3:PutObject",  
                "s3:PutObjectAcl"  
            ],  
            "Resource": "arn:aws:s3:::customer_session_manager_logging_bucket/*",  
            "Condition": {  
                "StringEquals": {  
                    "aws:PrincipalOrgID": "o-xxxxxxxxxxxxx"  
                }  
            }  
        }  
    ]  
}

创建 IAM 策略

首先,创建 IAM 策略以授予对 S3 桶和密钥的权限。

将以下示例策略附加到您的实例配置文件,以便在要连接的账户上使用。您可以使用内联策略或客户管理型策略来附加策略:

{  
    "Version": "2012-10-17",  
    "Statement": [  
        {  
            "Sid": "PutObjectsBucket",  
            "Action": [  
                "s3:PutObject",  
                "s3:PutObjectAcl"  
            ],  
            "Effect": "Allow",  
            "Resource": "arn:aws:s3:::customer_session_manager_logging_bucket/*"  
        },  
        {  
            "Sid": "ListBucketAndEncryptionConfig",  
            "Action": [  
                "s3:GetEncryptionConfiguration"  
            ],  
            "Effect": "Allow",  
            "Resource": "arn:aws:s3:::customer_session_manager_logging_bucket"  
        },  
        {  
            "Sid": "S3KMSSessionManagerKMS",  
            "Effect": "Allow",  
            "Action": [  
                "kms:Decrypt",  
                "kms:GenerateDataKey*"  
            ],  
            "Resource": [  
                "arn:aws:kms:us-east-1:ACCOUNTId:key/YOUR-KMS-FOR-SessionManagerEncryption",  
                "arn:aws:kms:us-east-1:ACCOUNTID:key/YOUR-KMS-FOR-S3BucketEncryption"  
            ]  
        }  
    ]  
}

(可选)使用会话管理器 Shell 配置文件创建和配置日志记录

要创建自定义 Shell 配置文件,请先创建一个文件。然后,使用描述名称保存文件,例如 SessionManagerRunShell.json。用以下示例替换此 .json 文件的内容:

**注意:**将 customer_session_manager_logging_bucket 替换为您的桶名称,将 YOUR-KMS-FOR-SessionManagerEncryption 替换为您的会话管理器的指定密钥。

{  
"schemaVersion": "1.0",  
"description": "Document to hold regional settings for Session Manager",  
"sessionType": "Standard_Stream",  
"inputs": {  
"s3BucketName": "customer_session_manager_logging_bucket",  
"s3KeyPrefix": "",  
"s3EncryptionEnabled": true,  
"cloudWatchLogGroupName": "",  
"cloudWatchEncryptionEnabled": false,  
"cloudWatchStreamingEnabled": false,  
"kmsKeyId": "arn:aws:kms:REGION:ACCOUNTID:key/YOUR-KMS-FOR-SessionManagerEncryption",  
"runAsDefaultUser": "",  
"idleSessionTimeout": "20",  
"maxSessionDuration": "",  
"shellProfile": {"windows": "", "linux": ""}  
  }  
}

运行以下命令将此文件另存为默认会话管理器文档:

aws ssm update-document --name "SSM-SessionManagerRunShell"   
--content "file://SessionManagerRunShell.json"   
--document-version "$LATEST"

验证会话管理器日志记录是否已配置到目标桶,并且正在使用 KMS 密钥

打开 S3 桶,确认已启用桶加密。检查 KMS ARN,确保会话管理器使用的是密钥 1。

**注意:**配置会话管理器跨账户日志记录时,最佳做法是使用账户 ID 的前缀。该做法可以帮助您跟踪账户及其关联日志。

要检查会话管理器首选项,请完成以下步骤:

  1. 打开会话管理器控制台,然后选择您的 AWS 区域。
  2. 确认您已启用 S3 桶加密,然后在账户 A 中输入密钥 1 的 ARN。
  3. 在 S3 桶中,输入账户 A 中的 S3 桶的名称。

验证桶中是否正在生成日志

要生成日志,请在其他账户中使用会话管理器连接到您的实例。

完成以下步骤:

  1. 打开会话管理器控制台,然后选择您的区域。
  2. 检查会话是否已连接并显示以下消息: “此会话使用 AWS KMS 加密”
  3. 输入几个测试条目以生成日志,然后结束会话。
  4. 在账户 A 中,导航到您为记录创建的 S3 桶,并按时间查找最新日志。

**注意:**断开会话连接后,可能需要至少 30 秒才能填充日志。有关详细信息,请参阅使用服务器访问日志记录的日志记录请求

相关信息

使用服务器端加密保护数据

Amazon S3 的操作、资源和条件键

桶策略示例

访问策略指南

允许用户使用特定的 KMS 密钥进行加密和解密

AWS 官方
AWS 官方已更新 1 年前