本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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主題原則
在 https://console.aws.amazon.com/sns/v3/
home 上打開 Amazon SNS 控制台。 -
在導覽窗格中,選擇主題。
-
選擇追蹤設定中顯示的SNS主題,然後選擇 [編輯]。
-
展開 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主題策略的編輯時,請選擇 [儲存變更]。
若要將aws:SourceAccount
條件金鑰新增至您的SNS主題原則
在 https://console.aws.amazon.com/sns/v3/
home 上打開 Amazon SNS 控制台。 -
在導覽窗格中,選擇主題。
-
選擇追蹤設定中顯示的SNS主題,然後選擇 [編輯]。
-
展開 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主題策略的編輯時,請選擇 [儲存變更]。
指定用於傳送通知的現有主題
您可以手動將 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 有傳送區域的通知,您的主題可能有一個較舊的政策,指定每個區域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 簡單通知服務開發人員指南。