本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 主題政策的條件金鑰
在 https://console.aws.amazon.com/sns/v3/home
開啟 Amazon SNS 主控台。 -
在導覽窗格中,選擇主題。
-
選擇線索設定中顯示的 SNS 主題,然後選擇 Edit (編輯)。
-
展開 Access policy (存取政策)。
-
在存取政策 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" }
-
為條件新增一個新區塊,
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" } } }
-
完成編輯 SNS 主題政策後,請選擇 Save changes (儲存變更)。
新增 aws:SourceAccount
SNS 主題政策的條件金鑰
在 https://console.aws.amazon.com/sns/v3/home
開啟 Amazon SNS 主控台。 -
在導覽窗格中,選擇主題。
-
選擇線索設定中顯示的 SNS 主題,然後選擇 Edit (編輯)。
-
展開 Access policy (存取政策)。
-
在存取政策 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" }
-
為條件新增一個新區塊,
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" } } }
-
完成編輯 SNS 主題政策後,請選擇 Save changes (儲存變更)。
指定用於傳送通知的現有主題
您可以手動將 Amazon SNS 主題的許可新增至 Amazon SNS 主控台中的主題政策,然後在主控 CloudTrail 台中指定主題。
手動更新 SNS 主題政策
在 https://console.aws.amazon.com/sns/v3/home
開啟 Amazon SNS 主控台。 -
選擇 Topics (主題),然後選擇主題。
-
選擇 [編輯],然後向下捲動至 [存取原則]。
-
新增來自SNS topic policy的陳述式,並為地區、帳戶 ID 和主題名稱的適當值。
-
如果您的主題是加密主題,則必須 CloudTrail 允許擁有
kms:GenerateDataKey*
和kms:Decrypt
權限。如需詳細資訊,請參閱 Encrypted SNS topic KMS key policy。 -
選擇 Save changes (儲存變更)。
-
返回主 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 開發人員指南》。