- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 cloudformation 模板创建两个资源 AWS Lambda 函数和角色。
我使用角色 arn 作为环境变量。稍后在 S3 连接的代码中使用它。但出现异常
com.amazonaws.services.securitytoken.model.AWSSecurityTokenServiceException:
User: arn:aws:sts::{account_id}:assumed-role/* is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::{account_id}:role/*
Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: ; Proxy: null)
如何在信任关系和内联策略中添加相同的角色?
如何克服上述异常?
其他解决方案值得赞赏
CF 模板片段
Resources:
LambdaFunctionExecutionRole:
Type: 'AWS::IAM::Role'
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
# AWS:
# - {Role ARN}
Action:
- 'sts:AssumeRole'
Path: /
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'
- 'arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole'
- 'arn:aws:iam::aws:policy/SecretsManagerReadWrite'
- 'arn:aws:iam::aws:policy/AmazonS3FullAccess'
- 'arn:aws:iam::aws:policy/CloudWatchLogsFullAccess'
- 'arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess'
- 'arn:aws:iam::aws:policy/service-role/AWSLambdaRole'
Policies:
- PolicyName: CustomLambdaPolicy
PolicyDocument:
Statement:
- Effect: Allow
Action:
- 'ec2:Describe*'
- 'ec2:Get*'
Resource: '*'
LambdaFunction:
Type: AWS::Serverless::Function
Properties:
Description: !Ref Name
FunctionName: !Ref Name
Handler: com.fileservice::handleRequest
Role: !GetAtt LambdaFunctionExecutionRole.Arn
Timeout: 900
MemorySize: 512
Environment:
Variables:
bucketName: !Ref S3BucketName
roleARN: !GetAtt LambdaFunctionExecutionRole.Arn
CodeUri: target/fileservice-1.0.0.jar
Runtime: java11
AWS S3 连接代码片段
public AmazonS3 connectS3(String roleArn, String region) {
STSAssumeRoleSessionCredentialsProvider stsAssumeRoleSessionCredentialsProvider = new STSAssumeRoleSessionCredentialsProvider.Builder(
roleArn, "MySession").withStsClient(AWSSecurityTokenServiceClientBuilder.standard().build())
.withRoleSessionDurationSeconds(900).build();
BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials(
stsAssumeRoleSessionCredentialsProvider.getCredentials().getAWSAccessKeyId(),
stsAssumeRoleSessionCredentialsProvider.getCredentials().getAWSSecretKey(),
stsAssumeRoleSessionCredentialsProvider.getCredentials().getSessionToken());
System.out.println("serviceEndpoint:- "+ String.format("https://s3.%s.amazonaws.com", region) );
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(basicSessionCredentials))
.withEndpointConfiguration( new EndpointConfiguration( String.format("https://s3.%s.amazonaws.com", region), region) )
.build();
return s3Client;
}
最佳答案
LambdaFunction:
Type: AWS::Serverless::Function
Properties:
Role: !GetAtt LambdaFunctionExecutionRole.Arn
如果您使用 AWS::Serverless::Function 的角色属性,则无需在 Lambda 代码中再次承担该角色。任何 AWS 开发工具包或 CLI 都会自动检索与该角色关联的凭证。
引用:https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html (来自文档:您在创建函数时提供此角色,并且 Lambda 在调用您的函数时承担该角色。)
忽略您不应该有理由允许角色自行承担这一事实,使用 CloudFormation,不可能在角色定义本身内引用角色的 ARN。尝试在 LambdaFunctionExecutionRole 的信任策略中使用 !GetAtt LambdaFunctionExecutionRole.Arn 会出现循环依赖错误。
编辑OP现已包含在问题中的代码更改:
而不是:
public AmazonS3 connectS3(String roleArn, String region) {
STSAssumeRoleSessionCredentialsProvider stsAssumeRoleSessionCredentialsProvider = new STSAssumeRoleSessionCredentialsProvider.Builder(
roleArn, "MySession").withStsClient(AWSSecurityTokenServiceClientBuilder.standard().build())
.withRoleSessionDurationSeconds(900).build();
BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials(
stsAssumeRoleSessionCredentialsProvider.getCredentials().getAWSAccessKeyId(),
stsAssumeRoleSessionCredentialsProvider.getCredentials().getAWSSecretKey(),
stsAssumeRoleSessionCredentialsProvider.getCredentials().getSessionToken());
System.out.println("serviceEndpoint:- "+ String.format("https://s3.%s.amazonaws.com", region) );
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(basicSessionCredentials))
.withEndpointConfiguration( new EndpointConfiguration( String.format("https://s3.%s.amazonaws.com", region), region) )
.build();
return s3Client;
}
为什么不这样做呢?
public AmazonS3 connectS3(String region) {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion(region).build();
return s3Client;
}
如果您的代码在 AWS Lambda 函数中运行,则无需执行 AssumeRole 操作来获取凭证,您可以直接使用分配给 Lambda 函数的角色来访问 S3。尝试承担角色的唯一原因是它是一个完全独立的角色,并且具有分配给 AWS Lambda 函数的角色所没有的所需权限。
关于java - 用户: arn:aws:sts::{account_id}:assumed-role/* 无权对资源执行: sts:AssumeRole: arn:aws:iam::{account_id}:role/*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70667744/
我试图告诉 Git 忽略我对属性文件所做的更改,这样我就不会不小心将它提交到我的 git 存储库。我正在使用: git update-index assume-unchanged [文件] 给出输出:
我收到这个错误,在我的项目中,我似乎无法弄清楚,错误是 error explicit type is missing('int assumed) 这就是我所拥有的; 发货.cpp Ship::Ship
我正在开发一个 git 代码库。我想更改服务器跟踪的项目 xml 文件。我想以这样的方式进行设置: 我的本地更改应该被忽略并且永远不会发送到服务器。 服务器应该同步覆盖我的本地更改。 目前我在用 gi
我想共享当前状态下的某个文件,但我不想提交进一步的更改。所以我对那个文件做了“假设不变”。现在,git 忽略了我存储库中这个文件的更改。但是存储库的其他用户呢——他们是否必须在他们自己的存储库中为这个
在我的教科书中,假设 ASSUME 指令告诉汇编程序用裁剪理段的逻辑段的名称。并且它使用从指定逻辑段开始的位移来编码指令。 Click here for the screenshot. 但是,当我在
我在 groovy 中有这个 junit(使用 JUnit 4.12)测试,只有在 getenv != null 时才应该执行: import org.junit.Assume imp
我有一组测试用例,如果满足某些条件,我希望忽略整个文件。我可以用吗Assume.assumeTrue(precondition); 在设置方法中确保如果前提条件为假则测试不会在整个文件中运行? 所以如
gcc(最新版本:4.8、4.9)是否有类似于icc 支持的__assume() 内置的“assume”子句?例如,__assume( n % 8 == 0 ); 最佳答案 从 gcc 4.8.2 开
我正在使用 datetime.strptime 在 Python 2.7 中解析一些日期时间字符串。我想假设日期早于现在。 但是 strptime 的 %y operator默认情况下不这样做: d
我将什么标记为 --assume-unchanged?有什么方法可以找出我使用该选项 stash 的内容吗? 我翻遍了 .git/ 目录,没有看到任何看起来像我期望的东西,但它一定在某个地方。我忘记了
我需要 assume-unchanged 标志来避免错误提交我的项目设置文件。我这样做是通过: git update-index --assume-unchanged 还有一种方法可以使用 --no
这是我的场景。 Account1 contains data for Finance, HR data in Frankfurt region. Account2 contains data for
我有这样的错误 Role arn:aws:iam::xxxxxx:role/cdk-xxxxxxxxp-northeast-1 is invalid or cannot be assumed 好的,所
我一直在尝试使用 ASSUME 编写汇编代码,但不断出现我无法找出原因的错误。这里有几个例子:示例 1 .286 .model medium, c pproc typedef ptr proc .da
我一直在尝试使用 ASSUME 编写汇编代码,但不断出现我无法找出原因的错误。这里有几个例子:示例 1 .286 .model medium, c pproc typedef ptr proc .da
我正在为 Terraform 模块编写测试用例。我有一个假设角色,我想将它传递给我的 go 测试。我不确定如何通过它。我将它定义为 const,然后我应该如何传递它,以便它在 terraform in
我有一个与 JAVA 通配符和泛型相关的问题。我不想发布自己的复杂代码,所以我将使用 Collection 接口(interface)进行演示: Collection stringCollection
考虑两个类: public class Point { public int x; public int y; public Point(int xVal, int yVal)
有没有一种方法可以强制 C# 编译器忽略缺少的对象运算符重载,而是在运行时处理该检查?我问是因为我有一个包含多个对象的容器,这些对象具有类型为 int、string、ushort 等的各种属性。我正在
在我的一个类中,我有一个 ExpandoObject 类型的私有(private)字段。该字段在构造函数中初始化 (this.expected = new ExpandoObject()),因此我相信
我是一名优秀的程序员,十分优秀!