У меня есть служба 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);
Но ошибка "Недопустимый параметр: Ошибка политики: ноль" такая же.