У меня есть служба SNS, я ищу способ создания этой части политики, используя C # SDK:
{
"Sid": "__console_sub_0",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"SNS:Subscribe",
"SNS:Receive"
],
"Resource": "arn:aws:sns:MYARN"
}
Это то, что я вижу, когда я устанавливаю его из консоли браузерадля «Разрешить этим пользователям публиковать сообщения в этой теме» и «Разрешить этим пользователям подписываться на эту тему», на данный момент она должна быть открыта для всех.
Для чего я пробовал:
1)
Policy snsPolicy = new Policy().WithStatements(
new Amazon.Auth.AccessControlPolicy.Statement(Amazon.Auth.AccessControlPolicy.Statement.StatementEffect.Allow)
.WithPrincipals(Principal.AllUsers)
.WithResources(new Resource("arn:aws:sns:MYARN"))
);
SetTopicAttributesRequest setTopicAttributesRequest = new SetTopicAttributesRequest();
setTopicAttributesRequest.TopicArn = "arn:aws:sns:MYARN";
setTopicAttributesRequest.AttributeName = "Policy";
setTopicAttributesRequest.AttributeValue = "test val";
Результат:
Invalid parameter: Policy Error: null
2)
AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(bucketRegion);
snsClient.AuthorizeS3ToPublish("arn:aws:sns:MYARN", "MYBUCKET");
List<string> tl = new List<string>();
tl.Add("*");
List<string> tl2 = new List<string>();
tl2.Add("SNS:Subscribe");
tl2.Add("SNS:Receive");
Amazon.SimpleNotificationService.Model.AddPermissionResponse permissionResponse = snsClient.AddPermission("arn:aws:sns:MYARN", "SubscribePolicy", tl, tl2);
Результат:
Invalid parameter: Policy statement action out of service scope!
В обоих случаяхЯ даже не уверен, что это правильная команда для этого.Может кто-нибудь установить меня на правильный путь?
Спасибо
РЕДАКТИРОВАТЬ
Я создал отчет и добавил его в политику, как предложено, и использовал его для SetTopicAttributesRequest:
AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(bucketRegion);
Policy snsPolicy = new Policy();
snsPolicy.Id = "test_id";
snsPolicy.Statements.Add(statment);
SetTopicAttributesRequest setTopicAttributesRequest = new SetTopicAttributesRequest();
setTopicAttributesRequest.TopicArn = "arn:aws:sns:MYARN";
setTopicAttributesRequest.AttributeName = "Policy";
setTopicAttributesRequest.AttributeValue = snsPolicy.ToJson();
snsClient.SetTopicAttributes(setTopicAttributesRequest);
Но ошибка «Недопустимый параметр: Ошибка политики: пусто» такая же.