Amazon SNS 主題政策 CloudTrail - AWS CloudTrail

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon SNS 主題政策 CloudTrail

若要傳送通知至 SNS 主題, CloudTrail 必須具有必要的權限。 CloudTrail當您在主 CloudTrail 控台中建立或更新追蹤時,建立 Amazon SNS 主題時,會自動將必要的許可附加至主題。

重要

作為安全最佳實務,為了限制對 SNS 主題的存取,我們強烈建議您在建立或更新線索以傳送 SNS 通知之後,手動編輯附加至 SNS 主題的 IAM 政策以新增條件金鑰。如需詳細資訊,請參閱此主題中的SNS 主題政策的安全最佳實務

CloudTrail 為您新增下列陳述式至政策,並包含下列欄位:

  • 允許的 SID。

  • 的服務主要名稱 CloudTrail。

  • SNS 主題,包含區域、帳戶 ID 和主題名稱。

下列原則允許 CloudTrail 從支援的區域傳送有關記錄檔傳遞的通知。如需詳細資訊,請參閱 CloudTrail 支援的地區。這是當您建立或更新追蹤並選擇啟用 SNS 通知時,附加至新的或現有的 SNS 主題政策的預設政策。

SNS 主題政策

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailSNSPolicy20131101", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:region:SNSTopicOwnerAccountId:SNSTopicName" } ] }

若要使用 AWS KMS加密的 Amazon SNS 主題傳送通知,您還必須在的政策中新增下列陳述式,以啟用事件來源 (CloudTrail) 和加密主題之間的相容性。 AWS KMS key

KMS 金鑰政策

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*" } ] }

如需詳細資訊,請參閱啟用來自 AWS 服務的事件來源與加密主題之間的相容性

SNS 主題政策的安全最佳實務

依預設, CloudTrail 附加至 Amazon SNS 主題的 IAM 政策陳述式可讓 CloudTrail 服務主體發佈到以 ARN 識別的 SNS 主題。若要協助防止攻擊者取得您 SNS 主題的存取權,並代表傳送通知 CloudTrail 給主題收件者,請手動編輯您的 CloudTrail SNS 主題原則,將aws:SourceArn條件金鑰新增至附加的原則陳述式 CloudTrail。此金鑰的值是線索的 ARN,或是使用 SNS 主題的線索 ARN 陣列。因為其同時包含特定線索 ID 和擁有線索之帳戶的 ID,所以會限制 SNS 主題只能存取那些具有管理線索許可的帳戶。在您將條件金鑰新增至 SNS 主題原則之前,請先從主 CloudTrail 控台的追蹤設定中取得 SNS 主題名稱。

亦支援 aws:SourceAccount 條件金鑰,但不建議使用。

新增 aws:SourceArn SNS 主題政策的條件金鑰
  1. https://console.aws.amazon.com/sns/v3/home 開啟 Amazon SNS 主控台。

  2. 在導覽窗格中,選擇主題

  3. 選擇線索設定中顯示的 SNS 主題,然後選擇 Edit (編輯)。

  4. 展開 Access policy (存取政策)

  5. 存取政策 JSON 編輯器中,尋找類似下列範例的區塊。

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496" }
  6. 為條件新增一個新區塊,aws:SourceArn,如下列範例所示。aws:SourceArn 的值是您要向 SNS 發送通知的線索的 ARN。

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:us-west-2:123456789012:trail/Trail3" } } }
  7. 完成編輯 SNS 主題政策後,請選擇 Save changes (儲存變更)。

新增 aws:SourceAccount SNS 主題政策的條件金鑰
  1. https://console.aws.amazon.com/sns/v3/home 開啟 Amazon SNS 主控台。

  2. 在導覽窗格中,選擇主題

  3. 選擇線索設定中顯示的 SNS 主題,然後選擇 Edit (編輯)。

  4. 展開 Access policy (存取政策)

  5. 存取政策 JSON 編輯器中,尋找類似下列範例的區塊。

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496" }
  6. 為條件新增一個新區塊,aws:SourceAccount,如下列範例所示。的值aws:SourceAccount是擁有 CloudTrail 追蹤之帳戶的識別碼。此範例將 SNS 主題的存取權限制為只有可以登入 AWS 帳戶 123456789012 的使用者。

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" } } }
  7. 完成編輯 SNS 主題政策後,請選擇 Save changes (儲存變更)。

指定用於傳送通知的現有主題

您可以手動將 Amazon SNS 主題的許可新增至 Amazon SNS 主控台中的主題政策,然後在主控 CloudTrail 台中指定主題。

手動更新 SNS 主題政策
  1. https://console.aws.amazon.com/sns/v3/home 開啟 Amazon SNS 主控台。

  2. 選擇 Topics (主題),然後選擇主題。

  3. 選擇 [編輯],然後向下捲動至 [存取原則]。

  4. 新增來自SNS topic policy的陳述式,並為地區、帳戶 ID 和主題名稱的適當值。

  5. 如果您的主題是加密主題,則必須 CloudTrail 允許擁有kms:GenerateDataKey*kms:Decrypt權限。如需詳細資訊,請參閱 Encrypted SNS topic KMS key policy

  6. 選擇 Save changes (儲存變更)

  7. 返回主 CloudTrail 控台並指定追蹤的主題。

針對 SNS 主題政策進行故障診斷

下列各節說明如何針對 SNS 主題政策進行故障診斷。

CloudTrail 沒有傳送區域的通知

當您建立新主題作為建立或更新追蹤的一部分時,會將必要的權限 CloudTrail 附加至您的主題。主題原則會使用服務主體名稱"cloudtrail.amazonaws.com",此名稱可 CloudTrail 讓您傳送所有區域的通知。

如果沒 CloudTrail 有傳送區域的通知,您的主題可能有較舊的政策,指定每個區域的 CloudTrail 帳號 ID。此原則 CloudTrail 授予僅針對指定區域傳送通知的權限。

下列主題原則只 CloudTrail 允許傳送指定九個區域的通知:

範例 主題政策與帳戶 ID
{ "Version": "2012-10-17", "Statement": [{ "Sid": "AWSCloudTrailSNSPolicy20131101", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::903692715234:root", "arn:aws:iam::035351147821:root", "arn:aws:iam::859597730677:root", "arn:aws:iam::814480443879:root", "arn:aws:iam::216624486486:root", "arn:aws:iam::086441151436:root", "arn:aws:iam::388731089494:root", "arn:aws:iam::284668455005:root", "arn:aws:iam::113285607260:root" ]}, "Action": "SNS:Publish", "Resource": "aws:arn:sns:us-east-1:123456789012:myTopic" }] }

此原則會根據個別 CloudTrail 帳號 ID 使用權限。若要傳送新區域的記錄檔,您必須手動更新政策以包含該區域的 CloudTrail帳戶 ID。例如,由於已新 CloudTrail 增對美國東部 (俄亥俄) 區域的支援,因此您必須更新政策以新增該區域的帳戶 ID ARN: "arn:aws:iam::475085895292:root"

最佳作法是更新原則以使用 CloudTrail 服務主體的權限。若要執行此作業,請將帳戶 ID ARN 取代成服務主體名稱:"cloudtrail.amazonaws.com"

這會 CloudTrail 授予傳送目前和新區域通知的權限。以下是上述政策的更新版本:

範例 主題政策與服務主體名稱
{ "Version": "2012-10-17", "Statement": [{ "Sid": "AWSCloudTrailSNSPolicy20131101", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:123456789012:myTopic" }] }

驗證政策具有正確的值:

  • Resource 欄位中,指定主題擁有者的帳戶號碼。對於您建立的主題,指定您的帳戶號碼。

  • 為區域和 SNS 主題名稱指定適當的值。

CloudTrail 未傳送組織中成員帳戶的通知

具有 AWS Organizations 組織追蹤的成員帳戶未傳送 Amazon SNS 通知時,SNS 主題政策的組態可能發生問題。 CloudTrail 即使資源驗證失敗,也會在成員帳戶中建立組織追蹤,例如組織軌跡的 SNS 主題不包含所有成員帳號 ID。如果 SNS 主題原則不正確,就會發生授權失敗。

若要檢查追蹤的 SNS 主題原則是否有授權失敗:

  • 從 CloudTrail 主控台,檢查軌跡的詳細資訊頁面。如果授權失敗,詳細資料頁面會包含警告,SNS authorization failed並指示要修正 SNS 主題原則。

  • 從中 AWS CLI,執行命get-trail-status令。如果授權失敗,命令輸出會包含值為的LastNotificationError欄位AuthorizationError

其他資源

如需有關 SNS 主題及訂閱方式的詳細資訊,請參閱《Amazon Simple Notification Service 開發人員指南》。