Amazon SNS 主題政策 CloudTrail - AWS CloudTrail

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

Amazon SNS 主題政策 CloudTrail

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

重要

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

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

  • 允許的SIDs。

  • 的服務主要名稱 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 服務主體發佈到SNS主題,由ARN. 若要協助防止攻擊者取得您SNS主題的存取權,並代表傳送通知 CloudTrail 給主題收件者,請手動編輯您的 CloudTrail SNS主題原則,將aws:SourceArn條件金鑰新增至附加的原則陳述式 CloudTrail。此索引鍵的值為追蹤ARN的值,或使用此SNS主題ARNs的軌跡陣列。因為它同時包含特定追蹤 ID 和擁有追蹤之帳戶的 ID,因此它會將SNS主題存取限制在只有具有管理追蹤權限的帳戶。在您將條件金鑰新增至SNS主題政策之前,請先從SNS主 CloudTrail 控台的追蹤設定中取得主題名稱。

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

若要將aws:SourceArn條件金鑰新增至您的SNS主題原則
  1. https://console.aws.amazon.com/sns/v3/ home 上打開 Amazon SNS 控制台。

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

  3. 選擇追蹤設定中顯示的SNS主題,然後選擇 [編輯]。

  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主題策略的編輯時,請選擇 [儲存變更]。

若要將aws:SourceAccount條件金鑰新增至您的SNS主題原則
  1. https://console.aws.amazon.com/sns/v3/ home 上打開 Amazon SNS 控制台。

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

  3. 選擇追蹤設定中顯示的SNS主題,然後選擇 [編輯]。

  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主題策略的編輯時,請選擇 [儲存變更]。

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

您可以手動將 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 有傳送區域的通知,您的主題可能有一個較舊的政策,指定每個區域IDs的 CloudTrail 帳戶。此原則 CloudTrail 授予僅針對指定區域傳送通知的權限。

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

範例 主題策略與帳戶 IDs
{ "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 帳戶使用權限IDs。若要傳送新區域的記錄檔,您必須手動更新政策以包含該區域的 CloudTrail帳戶 ID。例如,由於已新 CloudTrail 增對美國東部 (俄亥俄) 區域的支援,因此您必須更新政策以新增該區域ARN的帳戶 ID:"arn:aws:iam::475085895292:root"

最佳作法是更新原則以使用 CloudTrail 服務主體的權限。若要這麼做,請將帳戶 ID ARNs 取代為服務主體名稱:"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主題不包含所有成員帳號IDs。如果主SNS題原則不正確,就會發生授權失敗。

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

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

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

其他資源

如需有關SNS主題和訂閱主題的詳細資訊,請參閱 Amazon 簡單通知服務開發人員指南