尝试从 AWS Lambda 担任角色时“配置文件不能为空”

艾伦

如果我的问题很基本,请原谅我,但我是 AWS 的新手。我正在使用 Java 创建一个 lambda 函数,该函数可以承担另一个 AWS 账户的角色。我在另一个账户上创建了角色,在这个账户上创建了角色来承担该角色,并将该角色附加到我的 lambda 函数。(我已经使用用 Javascript 编写的 Lambda 函数测试了这些角色并且可以正常工作,因此应该正确设置它们)。

在我的 lambda 函数的代码中,我试图承担这个角色,以便我可以从另一个帐户访问某些服务。但是,如错误消息中所示,我收到“配置文件不能为空”,我不确定这意味着什么。

public String handleRequest(Map<String,String> event, Context context)
{

      String clientRegion = "us-east-1";
      String roleARN = "ARN_OF_ROLE_ON_THIS_ACC";
      String roleSessionName = "session";

      AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
                                              .withCredentials(new ProfileCredentialsProvider())
                                              .withRegion(clientRegion)
                                              .build();

      AssumeRoleRequest roleRequest = new AssumeRoleRequest()
                                              .withRoleArn(roleARN)
                                              .withRoleSessionName(roleSessionName);
      //The line below causes the error      
      AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest);
      Credentials sessionCredentials = roleResponse.getCredentials();

      BasicSessionCredentials awsCredentials = new BasicSessionCredentials(
             sessionCredentials.getAccessKeyId(),
             sessionCredentials.getSecretAccessKey(),
             sessionCredentials.getSessionToken());

      //do other stuff here
}

错误信息:

  "errorMessage": "profile file cannot be null",
  "errorType": "java.lang.IllegalArgumentException",
  "stackTrace": [
    "com.amazonaws.util.ValidationUtils.assertNotNull(ValidationUtils.java:37)",
    "com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:142)",
    "com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:133)",
    "com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:100)",
    "com.amazonaws.auth.profile.ProfileCredentialsProvider.getCredentials(ProfileCredentialsProvider.java:135)",
    "com.amazonaws.http.AmazonHttpClient$RequestExecutor.getCredentialsFromContext(AmazonHttpClient.java:1257)",
    "com.amazonaws.http.AmazonHttpClient$RequestExecutor.runBeforeRequestHandlers(AmazonHttpClient.java:833)",
    "com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:783)",
    "com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:770)",
    "com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:744)",
    "com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:704)",
    "com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:686)",
    "com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:550)",
    "com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:530)",
    "com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.doInvoke(AWSSecurityTokenServiceClient.java:1728)",
    "com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.invoke(AWSSecurityTokenServiceClient.java:1695)",
    "com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.invoke(AWSSecurityTokenServiceClient.java:1684)",
    "com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.executeAssumeRole(AWSSecurityTokenServiceClient.java:488)",
    "com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.assumeRole(AWSSecurityTokenServiceClient.java:457)",
    "com.amazon.amazonstoresadminportallambda.handlers.TestHandler.handleRequest(TestHandler.java:80)",
    "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
    "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
    "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
    "java.lang.reflect.Method.invoke(Method.java:498)"
  ]
}

谁能帮我这个?提前致谢!

延斯

您的 Lambda 函数代码尝试从其环境中读取凭证。为此,它使用ProfileCredentialsProvider显然假定存在~/.aws/credentials不存在文件。

尝试DefaultAWSCredentialsProviderChain,它应该从更多位置(环境变量、凭证文件、EC2 IAM 角色、Lambda IAM 角色等)读取凭证:

AWSSecurityTokenService stsClient = 
    AWSSecurityTokenServiceClientBuilder.standard()
                                        .withCredentials(new DefaultAWSCredentialsProviderChain())
                                        .withRegion(clientRegion)
                                        .build();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

AWS 尝试使用 Lambda

尝试从AWS Lambda查询API

AWS Lambda尝试列出DynamoDb表时出错

尝试使用ffmpeg时拒绝AWS Lambda权限

尝试调用Go AWS Lambda函数时拒绝权限

尝试访问MySQL时AWS Python Lambda超时

AWS Lambda尝试访问dynamoDB时发生运行时错误-ClassNotFoundException

尝试导入lambda时,没有名为“ requests_aws4auth”的模块

使用API网关尝试AWS Python Lambda函数中的访问参数时出错

发生内存溢出问题时,AWS Lambda是否尝试重试?

带有Spring Boot错误的AWS S3“配置文件不能为空”

AWS错误从S3下载对象,“配置文件不能为空”

担任AWS Lambda角色,在SSM调用中拒绝访问

AWS Lambda的Webpack配置?

无法从AWS Lambda函数获取AppConfig的配置配置文件

AWS Lambda访问文件

AWS帐户Lambda尝试触发B帐户的ecs运行任务

尝试使用无服务器获取AWS Lambda

每次尝试从 NodeJS 调用 AWS lambda 函数时,我都会收到“错误 [ConfigError]: Missing region in config”

当我尝试使用AWS Cognito登录时,收到有关自定义Lambda触发器的AccessDeniedException

尝试从Node.js中的AWS Lambda函数读取S3存储桶的内容时未获得结果

AWS lambda 在同一个 aws 账户中担任角色以访问 S3

尝试捕获,可选/空和lambda

AWS Lambda - 保存配置的位置

尝试删除参数时出现lambda错误

尝试获取在AWS Beanstalk上运行的django项目时不存在的实例配置文件出错

AWS Lambda - 支持多个文件

从AWS Lambda提供zip文件

通过AWS Lambda发送文件