【问题标题】:Access denied when calling the AssumeRole operation调用 AssumeRole 操作时拒绝访问
【发布时间】:2019-03-01 15:18:55
【问题描述】:

我有一个 cloudformation 模板,它创建一个 lambda 函数以及该 lambda 函数的角色。我尝试在 lambda 函数中担任角色,但不断收到错误:

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

有没有我遗漏的步骤?不知道为什么我无权担任该角色。如果我得到的错误是访问被拒绝而不是某些执行错误,我假设我缺少某种权限。

Cloudformation 片段:

  "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"
                }]]
              }
            }]
          }
        }

Lambda 函数片段:

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')

【问题讨论】:

  • 如果在创建 lambda 函数的过程中被传入,我是否还需要承担角色?
  • 您应该使用相关的 IAM 角色配置 Lambda 函数,以便它不需要显式代入它。此外,您似乎使用了错误的凭据,现在已经解决了原始问题。如果是这样,最好删除原始帖子或提供您自己的答案然后接受它。

标签: amazon-web-services aws-lambda amazon-cloudformation amazon-iam


【解决方案1】:

您的 Lambda 函数将自动使用与附加到该函数的角色关联的权限。无需创建凭据。

所以,只需使用:

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

【讨论】:

    猜你喜欢
    • 2022-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 2018-07-12
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    相关资源
    最近更新 更多