我有一个SQS主题,我想配置它来启用交付状态日志记录。
理想情况下,我希望将我的配置作为CloudFormation中的代码,但我想先尝试在UI中配置我的主题。
我的现有IAM角色包括以下政策文件:
- Effect: Allow
Action:
- "logs:*"
Resource: '*'
以下是我尝试的步骤(基于这些说明(:
- 在web UI中打开AWS SNS主题页面
- 打开我要编辑的SNS主题
- 单击编辑按钮
- 展开交付状态日志部分
- 选中HTTP/S复选框
- 将成功采样率更改为100%
- 输入IAM角色ARN,用于具有上述成功和失败交付政策文件的角色
- 按下保存更改按钮
当我按下保存更改按钮时,我会收到以下错误消息:
无法设置传递状态日志记录错误代码:InvalidParameter-错误消息:为http的成功传递设置属性传递状态日志IAM角色时出错。无效参数:HTTPSuccessFeedbackRoleArn:不是允许SNS写入Cloudwatch日志的有效角色
我不明白为什么角色不允许SNS写入CloudWatch日志,因为我在IAM角色的策略中使用通配符操作logs:*
。
如何正确地为我的SNS主题启用HTTP/S传递日志记录?
正如@Riz所指出的,我不得不将IAM角色中的Service
更改为sns.amazonaws.com
。
以下是CloudFormation中IAM角色的完整定义,该定义用于启用交付日志记录(尽管资源可能受到限制(:
snsIAMRole:
Type: "AWS::IAM::Role"
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service: sns.amazonaws.com
Action: "sts:AssumeRole"
Policies:
- PolicyName: test-policy-for-sns
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- "logs:*"
Resource: '*'
只需更改角色信任关系即可。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "sns.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]}