如何從多個帳戶為 Session Manager 日誌記錄設定集中 Amazon S3 儲存貯體?

4 分的閱讀內容
0

我想為我的 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 擁有集中式儲存貯體。

然後完成以下步驟:

  1. 在帳戶 A 中,建立一個或兩個自訂 AWS KMS key 和一個自訂 KMS 政策。
  2. 在帳戶 A 中,建立一個 S3 儲存貯體用於 Systems Manager 日誌記錄。
  3. 在帳戶 A 中,建立適用於該 S3 儲存貯體的資源政策。
  4. 在另一個帳戶中,建立一個 IAM 政策,以向 S3 儲存貯體和兩個 KMS key 授予權限。
  5. (選用) 使用 Session Manager Shell 設定檔來建立和設定日誌記錄。
  6. 確認 Session Manager 日誌記錄已設定為目的地儲存貯體,並且正在使用 KMS key。
  7. 確認儲存貯體中正在產生日誌。

解決方法

**注意:**為了限制權限範圍,下列範例程序使用適用於角色和 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:PutObjects3:PutObjectAcl 權限。
  • 存取儲存貯體和 Session Manager 時提供 KMS key 存取權的 kms:Decryptkms: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 偏好設定,請完成以下步驟:

  1. 開啟Session Manager 主控台,然後選擇您的 AWS 區域。
  2. 確認您已開啟 S3 儲存貯體加密,然後輸入帳戶 A 中金鑰 1 的 ARN。
  3. 在 S3 儲存貯體中,輸入帳戶 A 中的 S3 儲存貯體的名稱。

確認儲存貯體中正在產生日誌

要產生日誌,請在另一個帳戶中使用 Session Manager 連線至執行個體。

完成下列步驟:

  1. 開啟Session Manager 主控台,然後選擇您的區域。
  2. 檢查工作階段是否已連線,並顯示下列訊息: 「此工作階段已使用 AWS KMS 加密」
  3. 輸入一些測試項目以產生日誌,然後結束工作階段。
  4. 在帳戶 A 中,導覽至您為日誌記錄所建立的 S3 儲存貯體,並依時間尋找最新日誌。

**注意:**中斷工作階段後,可能需要至少 30 秒才能填入日誌。如需詳細資訊,請參閱使用伺服器存取記錄的記錄請求

相關資訊

以伺服器端加密保護資料

Amazon S3 的動作、資源和條件金鑰

儲存貯體政策範例

存取政策準則

允許使用者使用特定 KMS key 加密和解密

AWS 官方
AWS 官方已更新 10 個月前