跳至内容

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

3 分钟阅读
0

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

解决方法

配置权限

Systems Manager Agent (SSM Agent) 使用相同的 AWS Identity and Access Management (IAM) 角色来激活并将日志上传到 Amazon S3。

您可以使用以下 IAM 角色之一:

要授予权限,请使用以下策略:

  • 拥有 IAM 主体的 AWS 账户必须使用 IAM 策略来授予 Amazon S3 权限。
  • S3 存储桶的所有者必须使用 AWS Key Management Service (AWS KMS) 密钥策略或访问控制列表 (ACL) 来允许访问所有账户。
  • 如果存储桶使用 AWS KMS 密钥进行加密,则您必须使用 IAM 策略。
  • 您必须将 IAM 策略附加到授予 SSM Agent 权限的角色。
  • 您必须使用 KMS 密钥策略授予对用于加密存储桶的 AWS KMS 密钥的访问权限。
  • 您必须使用 AmazonSSMManagedInstanceCore AWS 托管式策略来访问 Systems Manager 的核心功能。

会话管理器将日志上传到 S3 存储桶需要以下权限:

  • s3:PutObjects3:PutObjectAcl 权限,用于将加密对象上传到 S3 存储桶。
  • kms:Decryptkms:GenerateDataKey 权限,用于访问 AWS KMS 密钥。
  • aws:PrincipalOrgID: o-xxxxxxx 权限,用于限制与您在 AWS Organizations 中的组织 ID 不匹配的主体的访问权限。

验证与以下端点的连接:

  • Amazon S3 端点:com.amazonaws.region.s3
  • AWS KMS 服务端点:com.amazonaws.region.kms
  • Systems Manager 端点:com.amazonaws.region.ssm
  • Systems Manager 会话管理器端点:com.amazonaws.region.ssmmessages
  • Amazon EC2 端点:com.amazonaws.region.ec2

创建 AWS KMS 密钥和密钥策略

创建 AWS KMS 密钥以加密 S3 存储桶和会话管理器日志。

您可以创建一个密钥来同时加密会话管理器日志和 AWS KMS,也可以为各自创建单独的密钥。

对于每个密钥,请将以下密钥语句添加到 AWS KMS 策略中,以允许会话管理器加密日志:

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

**注意:**请将 aws:PrincipalOrgID 替换为您的组织 ID,将 Principal 替换为您的 IAM 角色的 ARN。

创建 S3 存储桶和存储桶策略

创建 S3 存储桶以存储会话管理器日志。有关详细信息,请参阅创建通用存储桶使用 Amazon 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 策略以访问 S3 存储桶和 AWS KMS 密钥

创建一个 IAM 策略,以授予访问 S3 存储桶和 AWS KMS 密钥的权限。

将以下示例策略附加到您的账户用于连接到 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"
      ]
    }
  ]
}

**注意:**您可以使用内联策略或客户管理型策略。有关详细信息,请参阅将 IAM 策略与 AWS KMS 配合使用

(可选)为日志配置会话管理器 Shell 配置文件

要创建自定义 Shell 配置文件,请创建一个 JSON 文件,删除内容并将其替换为以下值:

{
  "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": ""}
  }
}

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

运行以下命令将文件保存为默认的会话管理器文档,采用 SessionManagerRunShell.json 等类似名称:

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

验证会话管理器日志记录配置

打开 Amazon S3 控制台,然后导航到日志记录存储桶。在 Bucket(存储桶)设置中,确认存储桶加密处于活动状态。此外,确认 AWS KMS 密钥 ARN 与密钥 1 相匹配,以确保会话管理器使用正确的加密密钥。

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

  1. 打开会话管理器控制台
  2. 选择您的 AWS 区域。
  3. 确认您已启用加密。
  4. 输入密钥 1 的 ARN。
  5. 验证您是否配置了正确的 S3 存储桶。

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

要生成日志,请在另一个账户中使用会话管理器。

完成以下步骤:

  1. 使用会话管理器连接到实例
  2. 选择您的区域。
  3. 验证会话是否连接并显示“This Session is Encrypted using AWS KMS”(此会话已使用 AWS KMS 加密)。
  4. 输入测试条目以生成日志,然后结束会话。

**注意:**会话结束后,日志可能需要至少 30 秒才能显示。有关详细信息,请参阅使用服务器访问日志记录来记录请求

相关信息

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

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

Amazon S3 存储桶策略的示例

Amazon S3 中的访问控制

AWS 官方已更新 6 个月前