Ошибка создания навыка с помощью Cloudformation - PullRequest
0 голосов
/ 31 января 2019

У меня есть месяц на развитие навыков Алексы, и я хочу создать их с помощью Cloudformation.И для этого я использую это:

Лямбда-функция

{
   "AWSTemplateFormatVersion": "2010-09-09",
   "Description": "Lambda Function from Cloud Formation by Felix Vazquez",
   "Resources": {
      "Lambda1": {
         "Type": "AWS::Lambda::Function",
         "Properties": {
            "Code": {
               "S3Bucket": "felix-lambda-code",
               "S3Key": "hello_lambda.zip"
            },
            "Description": "Test with Cloud Formation",
            "FunctionName": "Felix-hello-world1234",
            "Handler": "lambda_function.lambda_handler",
            "Role": "arn:aws:iam::776831754616:role/testRol",
            "Runtime": "python2.7"
         }
      }
   }
}

Alexa Skill

"Resources": {
        "23LT3": {
            "Type": "Alexa::ASK::Skill",
            "Properties": {
                "AuthenticationConfiguration": {
                    "ClientId": "+my client ID+",
                    "ClientSecret": "+my client Secret+",
                    "RefreshToken": "+The token i generate via lwa+"
                },
                "VendorId": "+my vendor ID+",
                "SkillPackage": {
                    "S3Bucket": "myskillpackagebucket",
                    "S3Key": "my_function10.zip",
                    "S3BucketRole": {
                        "Fn::GetAtt": [
                            "IAMRU6TJ",
                            "Arn"
                        ]
                    },
                    "Overrides": {
                        "Manifest": {
                            "apis": {
                                "custom": {
                                    "endpoint": {
                                        "uri": {
                                            "Fn::GetAtt": [
                                                "Lambda1",
                                                "Arn"
                                            ]
}}}}}}}}

Роль IAM

{
    "Resources": {
        "IAMRU6TJ": {
            "Type": "AWS::IAM::Role",
            "Properties": {
                "AssumeRolePolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Effect": "Allow",
                            "Principal": {
                                "Service": [
                                    "s3.amazonaws.com",
                                    "lambda.amazonaws.com"
                                ]
                            },
                            "Action": [
                                "sts:AssumeRole"
                            ]
                        }
                    ]
                },
                "Path": "/",
                "Policies": [
                    {
                        "PolicyName": "root",
                        "PolicyDocument": {
                            "Version": "2012-10-17",
                            "Statement": [
                                {
                                    "Effect": "Allow",
                                    "Action": "*",
                                    "Resource": "*"
}]}}]}}}}

Умение зависит от лямбды и роли IAM.Когда через несколько секунд я «Создаю стек», он выдает мне эту ошибку:

Не могу принять предоставленную роль.Причина: доступ запрещен (служба: AWSSecurityTokenService; код состояния: 403; код ошибки: AccessDenied; идентификатор запроса: b2e8762c-2593-11e9-b3ec-872599411915)

Для токена я использую

ask util generate-lwa-tokens --scope "alexa::ask:skills:readwrite alexa::ask:models:readwrite profile”

изображение событий:

Событие после выполнения

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Я изо всех сил пытался найти необходимые детали, документированные в любом месте.Вот роль, которую я использовал, чтобы заставить это работать.

  AlexaReadRole:
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action:
              - sts:AssumeRole
            Effect: Allow
            Principal:
              Service:
                - alexa-appkit.amazon.com
            Sid: AllowServiceToAssumeRole
        Version: 2012-10-17
      Policies:
        - PolicyName: "AlexaS3Read"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: "Allow"
                Action: "s3:GetObject"
                Resource: "arn:aws:s3:::<bucket-name>/<path-to-alexa-files>/*"
    Type: AWS::IAM::Role
0 голосов
/ 01 февраля 2019

ваш ресурс Alexa :: ASK :: Skill: 23LT3['Properties']['SkillPackage']['S3BucketRole']

В документах указано ARN роли, которая предоставляет сервису Alexa разрешение на доступ к корзине и получение пакета навыков.Эта роль необязательна, и если она не предоставлена, для корзины необходимо настроить политику, разрешающую такой доступ, или сделать ее общедоступной, чтобы AWS CloudFormation мог создать навык.

В настоящее время ваша роль разрешает s3.amazonaws.com и lambda.amazonaws.com, чтобы взять на себя роль, которая может делать что-либо в вашей учетной записи AWS, однако вам необходимо разрешить «Служба Alexa - разрешение ...»

Лучшей практикой будет использование наименьших привилегий.необходимо, но я понимаю, если вы просто тестируете его.

...