AWS CLI: Когда необходимо добавлять разрешение в топи SNS c? - PullRequest
1 голос
/ 17 июня 2020

Я узнаю о AWS; конкретный вариант использования c, о котором я узнаю, - это добавление объекта к ведру S3, запускающее уведомление SNS, на которое подписан Lambda, тем самым вызывая Lambda.

Чтение в Интернете привело меня к странице s3api put-bucket-notification-configuration , на которой написано:

SNS topi c должен иметь прикрепленную к нему политику IAM, которая позволяет Amazon S3 publi sh к нему

Это привело меня к странице sns add-permission , подпись запроса которой:

  add-permission
--topic-arn <value>
--label <value>
--aws-account-id <value>
--action-name <value>

Вопрос: необходимо ли явно добавлять разрешение для SNS topi c, даже если издатель находится в той же учетной записи, в которой был создан topi c?
Формулировка в связанной документации подразумевает, что это необходимо только в том случае, если издатель из другой учетной записи, но я не уверен, правильно ли я это интерпретирую.

Например, в моих экспериментах все, с чем я работаю, является частью той же учетной записи. Например:

$ aws sns list-topics --profile=admin --endpoint-url=http://localhost:4575
{
    "Topics": [
        {
            "TopicArn": "arn:aws:sns:us-east-1:000000000000:my-test-topic"
        }
    ]
}
$
$ aws --profile=lambda-admin --endpoint-url=http://localhost:4574 lambda list-functions
{
    "Functions": [
        {
            "FunctionName": "first_lambda",
            "FunctionArn": "arn:aws:lambda:us-east-1:000000000000:function:first_lambda",
            "Runtime": "python3.7",
            "Role": "arn:aws:iam::000000000000:role/lambda-role",
            "Handler": "first_lambda.lambda_handler",
            "CodeSize": 311,
            "Description": "",
            "Timeout": 5,
            "LastModified": "2020-06-16T05:10:16.311+0000",
            "CodeSha256": "jRcHzt34ZSDUCyx+INftvu14njRqGeSozKa0Uxv4J98=",
            "Version": "$LATEST",
            "TracingConfig": {
                "Mode": "PassThrough"
            },
            "RevisionId": "af64db69-0b5a-41ad-86c2-8467a60cf618",
            "State": "Active"
        }
    ]
}

(я не нашел способа получить ARN ведра S3 из интерфейса командной строки, но мой связан с той же учетной записью).

1 Ответ

1 голос
/ 17 июня 2020

Вопрос: необходимо ли явно добавлять разрешение в топи c в SNS, даже если издатель находится в той же учетной записи, в которой был создан топи c?

Политика по умолчанию для sqs содержит следующее:

      "Principal": {
        "AWS": "*"
      }

Это позволит любой объект IAM (пользователь IAM, роль) из вашей учетной записи (Condition; не показано, но присутствует в политике) на SNS:Publish (среди прочего) на ваш топи c. Однако у них все еще должны быть собственные разрешения на публикацию sh. Например, для лямбда-выражения вам все равно необходимо добавить разрешения sns к его роли выполнения, что сбивает людей с толку .

Важно отметить AWS. Клавиша AWS в Principal не включает услуги, такие как S3. Причина в том, что Principal для службы S3 выглядит так:

   "Principal": {
     "Service": "s3.amazonaws.com"  
   }

Следовательно, вы должны явно разрешить службу S3 для публикации sh в топи c в политике topi c.

Я не нашел способа получить ARN ведра S3 из интерфейса командной строки, но мой связан с той же учетной записью

ARN ведра имеет формат :

arn: aws: s3 ::: bucket_name

или в Китай:

arn: aws -cn: s3 ::: bucket_name

Таким образом, даже если CLI явно не предоставляет ARN, вы всегда можете его построить самому себе довольно легко. И если вы не уверены, находится ли ваша корзина в Китае или нет, вы можете использовать get-bucket-location , чтобы убедиться в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...