如何为来自多个账户的会话管理器日志记录配置中央 Amazon S3 桶?
我想为我的 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 拥有集中式桶。
然后完成以下步骤:
- 在账户 A 中,创建一个或两个自定义 AWS KMS 密钥和一个自定义 KMS 策略。
- 在账户 A 中,为 Systems Manager 日志创建一个 S3 桶。
- 在账户 A 中,为 S3 桶创建资源策略。
- 在另一个账户中创建 IAM 策略,以授予对 S3 桶和两个 KMS 密钥的权限。
- (可选)使用会话管理器 Shell 配置文件创建和配置日志记录。
- 验证会话管理器日志记录是否已配置到目标桶,并且正在使用 KMS 密钥。
- 验证桶中是否正在生成日志。
解决方法
**注意:**为了确定权限范围,以下示例过程使用角色和 AWS Organizations 的条件键。如果您需要额外的权限控制,最佳做法是在会话管理器中使用主体角色。
此过程使用以下密钥权限:
- 提供系统管理员权限的 IAM AWS 托管式策略 AmazonSSMManagedInstanceCore。
- 描述 S3 桶上的加密配置的 s3:GetEncryptionConfiguration 权限。
- 将加密对象放入 S3 桶的 s3:PutObject 和 s3:PutObjectAcl 权限。
- 在访问桶和会话管理器时提供 KMS 密钥访问权限的 kms:Decrypt 和 kms: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 的前缀。该做法可以帮助您跟踪账户及其关联日志。
要检查会话管理器首选项,请完成以下步骤:
- 打开会话管理器控制台,然后选择您的 AWS 区域。
- 确认您已启用 S3 桶加密,然后在账户 A 中输入密钥 1 的 ARN。
- 在 S3 桶中,输入账户 A 中的 S3 桶的名称。
验证桶中是否正在生成日志
要生成日志,请在其他账户中使用会话管理器连接到您的实例。
完成以下步骤:
- 打开会话管理器控制台,然后选择您的区域。
- 检查会话是否已连接并显示以下消息: “此会话使用 AWS KMS 加密”
- 输入几个测试条目以生成日志,然后结束会话。
- 在账户 A 中,导航到您为记录创建的 S3 桶,并按时间查找最新日志。
**注意:**断开会话连接后,可能需要至少 30 秒才能填充日志。有关详细信息,请参阅使用服务器访问日志记录的日志记录请求。
相关信息
相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前