如何從多個帳戶為 Session Manager 日誌記錄設定集中 Amazon S3 儲存貯體?
我想為我的 AWS 帳戶設定 Session Manager 集中 Amazon Simple Storage Service (Amazon S3) 日誌記錄 (AWS Systems Manager 的一項功能)。
簡短描述
在 Systems Manager 中,您可以識別和設定 Session Manager 的](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-logging.html#session-manager-logging-s3)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 代理程式權限的角色。
- 用來加密儲存貯體的 KMS 金鑰也必須透過 KMS 金鑰政策授予權限。
若要為 Session Manager 設定中心 Amazon S3 儲存貯體日誌記錄,請先識別擁有集中式 S3 儲存貯體的主要帳戶。在下列範例中,帳戶 A 擁有集中式儲存貯體。
然後完成以下步驟:
- 在帳戶 A 中,建立一個或兩個自訂 AWS KMS key 和一個自訂 KMS 政策。
- 在帳戶 A 中,建立一個 S3 儲存貯體用於 Systems Manager 日誌記錄。
- 在帳戶 A 中,建立適用於該 S3 儲存貯體的資源政策。
- 在另一個帳戶中,建立一個 IAM 政策,以向 S3 儲存貯體和兩個 KMS key 授予權限。
- (選用) 使用 Session Manager Shell 設定檔來建立和設定日誌記錄。
- 確認 Session Manager 日誌記錄已設定為目的地儲存貯體,並且正在使用 KMS key。
- 確認儲存貯體中正在產生日誌。
解決方法
**注意:**為了限制權限範圍,下列範例程序使用適用於角色和 AWS Organizations 的條件金鑰。如果您需要其他權限控制,則最佳實務是在 Session Manager 中使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)主體角色[。
此程序會使用下列金鑰權限:
- IAM AWS 受管政策 AmazonSSMManagedInstanceCore 提供 System Manager 權限。
- 描述 S3 儲存貯體加密組態的 s3:GetEncryptionConfiguration 權限。
- 將加密物件放入 S3 儲存貯體的 s3:PutObject 和 s3:PutObjectAcl 權限。
- 存取儲存貯體和 Session Manager 時提供 KMS key 存取權的 kms:Decrypt 和 kms:GenerateDataKey 權限。
- 允許受限制存取與 Organizations ID 不符的任意主體的 aws:PrincipalOrgID: o-xxxxxxx 權限。
先決條件
您必須具有下列服務至端點的連線:
- Amazon S3
- AWS KMS
- Systems Manager 和 Systems Manager 訊息
- Amazon EC2 訊息
建立 KMS key
首先,創建一個或兩個金鑰。
- 如果您要建立一個金鑰,請將它 (金鑰 1) 用於 Session Manager 日誌記錄儲存貯體上的 S3 加密和 Session Manager 偏好設定 KMS 加密。
- 如果您要建立兩個金鑰,請將第一個 KMS 金鑰 (金鑰 1) 用來加密 S3 儲存貯體以進行日誌記錄。將第二個 KMS 金鑰 (金鑰 2) 用於加密流入 Amazon S3 儲存貯體的 Session Manager 串流。
然後,為每個金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-overview.html)建立 Sid 金鑰[。務必將 Sid 元素新增至每個金鑰的 KMS 政策。
若要允許 Session Manager 加密工作階段,請將下列權限新增至 Organizations:
**注意:**將 aws:PrincipalOrgID 值替換為您的 Organizations ID 和主體 ARN。
{ "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-xxxxxxx" } } }
建立 S3 儲存貯體用於在賬戶 A 中進行日誌記錄
建立 Amazon S3 儲存貯體用於在帳戶 A 中記錄 Session Manager 資料。請務必為儲存貯體命名,例如,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" ] } ] }
(選用) 使用 Session Manager Shell 設定檔來建立和設定日誌記錄
若要建立自訂 Shell 設定檔,請先建立一個檔案。然後,使用描述性名稱保存該當然,例如 SessionManagerRunShell.json。用下列範例取代此 .json 檔案的內容:
**注意:**用您的儲存貯體名稱替換 customer_session_manager_logging_bucket,並且用您的 Session Manager 指定金鑰替換 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": ""} } }
執行下列命令,將此檔案儲存為預設 Session Manager 文件:
aws ssm update-document --name "SSM-SessionManagerRunShell" --content "file://SessionManagerRunShell.json" --document-version "$LATEST"
確認將 Session Manager 日誌記錄設定為目的地儲存貯體,並且正在使用 KMS key
開啟 S3 儲存貯體,並確認您已開啟儲存貯體加密。檢查 KMS ARN 以確定 Session Manager 正在使用金鑰 1。
**注意:**設定 Session Manager 跨帳戶日誌記錄時,最佳實務是使用帳戶 ID 的前綴。這可協助您追蹤帳戶及其相關聯的日誌。
若要檢查 Session Manager 偏好設定,請完成以下步驟:
- 開啟Session Manager 主控台,然後選擇您的 AWS 區域。
- 確認您已開啟 S3 儲存貯體加密,然後輸入帳戶 A 中金鑰 1 的 ARN。
- 在 S3 儲存貯體中,輸入帳戶 A 中的 S3 儲存貯體的名稱。
確認儲存貯體中正在產生日誌
要產生日誌,請在另一個帳戶中使用 Session Manager 連線至執行個體。
完成下列步驟:
- 開啟Session Manager 主控台,然後選擇您的區域。
- 檢查工作階段是否已連線,並顯示下列訊息: 「此工作階段已使用 AWS KMS 加密」
- 輸入一些測試項目以產生日誌,然後結束工作階段。
- 在帳戶 A 中,導覽至您為日誌記錄所建立的 S3 儲存貯體,並依時間尋找最新日誌。
**注意:**中斷工作階段後,可能需要至少 30 秒才能填入日誌。如需詳細資訊,請參閱使用伺服器存取記錄的記錄請求。
相關資訊

相關內容
- 已提問 1 年前lg...
- 已提問 7 個月前lg...
- 已提問 2 年前lg...
- 已提問 4 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 7 個月前
- AWS 官方已更新 4 年前