Доступ запрещен при вызове операции AssumeRole - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть шаблон облачной информации, который создает лямбда-функцию, а также роль для этой лямбда-функции.Я пытаюсь взять на себя роль в лямбда-функции, но получаю сообщение об ошибке:

An error occurred (AccessDenied) when calling the AssumeRole operation: Access denied

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

Фрагмент облачной информации:

  "LambdaRoleCustomResource": {
      "Type": "AWS::IAM::Role",
      "Condition": "CreateWebACL",
      "DependsOn": "WAFWebACL",
      "Properties": {
        "RoleName": {
          "Fn::Join": ["-", [{
            "Ref": "AWS::StackName"
          }, "Custom-Resource"]]
        },
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [{
            "Effect": "Allow",
            "Principal": {
              "Service": ["lambda.amazonaws.com"]
            },
            "Action": ["sts:AssumeRole"]
          }]
        },
        "Path": "/",
        "Policies": [{
          "PolicyName": "S3Access",
          "PolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [{
              "Effect": "Allow",
              "Action": [
                "s3:CreateBucket",
                "s3:GetBucketLocation",
                "s3:GetBucketNotification",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutBucketNotification"
              ],
              "Resource": {
                "Fn::Join": ["", ["arn:aws:s3:::", {
                  "Ref": "AccessLogBucket"
                }]]
              }
            }]
          }
        }

Фрагмент лямбда-функции:

sts_client = boto3.client('sts')
        sts_credentials = sts_client.assume_role(RoleArn='arn:aws:iam::XXXXXXXXX:role/portal-cloudfront-waf-Custom-Resource', RoleSessionName='custom-resource-cf-session')
        sts_credentials = sts_credentials['Credentials']
        cf = boto3.client('cloudformation', aws_access_key_id=sts_credentials['AccessKeyId'], aws_secret_access_key=sts_credentials['SecretAccessKey'], aws_session_token=sts_credentials['SessionToken'])
        stack_name = event['ResourceProperties']['StackName']
        cf_desc = cf.describe_stacks(StackName=stack_name)

        global waf
            sts_client = boto3.client('sts')
            sts_credentials = sts_client.assume_role(RoleArn='arn:aws:iam::XXXXXXXX:role/portal-cloudfront-waf-Custom-Resource', RoleSessionName='custom-resource-waf-session')
            sts_credentials = sts_credentials['Credentials']
            s3 = boto3.client('waf', aws_access_key_id=sts_credentials['AccessKeyId'], aws_secret_access_key=sts_credentials['SecretAccessKey'], aws_session_token=sts_credentials['SessionToken'])
            waf = boto3.client('waf')

1 Ответ

0 голосов
/ 26 сентября 2018

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

Итак, просто используйте:

cf = boto3.client('cloudformation')
s3 = boto3.client('waf')
...