Amazon web services AWS Pipeline buildspec拒绝访问SecretManager,但已授权部署Beanstalk实例
我们已将Amazon web services AWS Pipeline buildspec拒绝访问SecretManager,但已授权部署Beanstalk实例,amazon-web-services,amazon-elastic-beanstalk,amazon-iam,aws-codepipeline,aws-codebuild,Amazon Web Services,Amazon Elastic Beanstalk,Amazon Iam,Aws Codepipeline,Aws Codebuild,我们已将MyReadOnlySecretServer策略设置为: { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy",
MyReadOnlySecretServer
策略设置为:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"secretsmanager:GetResourcePolicy",
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret",
"secretsmanager:ListSecretVersionIds"
],
"Resource": "arn:aws:secretsmanager:REGION:SOME_ID:secret:ID_OF_OUR_SECRET_JSON"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"secretsmanager:GetRandomPassword",
"secretsmanager:ListSecrets"
],
"Resource": "*"
}
]
}
我们在Elastic Beanstalk上部署了一个SpringBoot应用程序,并在生产中成功地检索和使用了该秘密
然而,不知何故,当我们仍处于管道的构建阶段时,显然我们的CodeStarWorker无法读取这些值。例外情况如下:
software.amazon.awssdk.services.secretsmanager.model.SecretsManagerException:
用户:
arn:aws:sts::SOME_ID:acked role/CodeStarWorker blabla工具链/AWSCodeBuild一些长ID
未被授权在上执行:secretsmanager:GetSecretValue
资源:
arn:aws:secretsmanager:REGION:SOME\u ID:secret:ID\u OF\u OUR\u secret\u JSON
(服务:SecretsManager,状态代码:400,请求ID:
其他一些长id)
我们在部署时尝试访问机密时出现了此异常,如异常所述,将MyReadOnlySecretServer
策略添加到IAM角色CodeStarWorker blabla工具链中,事情得到了解决
然而,现在我们尝试在buildspec.yml
中运行mvn测试,我们得到了同样的异常
为什么我们的buildspec.yml
被拒绝访问,尽管它是由执行“源代码+构建+部署”阶段的相同代码管道运行的?一旦部署,实例就具有访问权限,但在构建时,它就没有访问权限
以下是buildspec.yml
:
在我看来,CodeBuild假定角色为“CodeStarWorker blabla ToolChain”,而角色本身没有“secretsmanager:GetSecretValue”权限。此外,在内存中,CodeStarWorker角色有一个权限边界,该边界可能会阻止访问,即使您已显式添加了所需的权限。这里讨论了一个类似的问题:
确认您的代码管道正在使用正确的服务角色。打开代码构建步骤,然后单击编辑>环境。确保服务角色指向您配置的角色。@jpetty当我编辑管道并单击编辑生成阶段时,没有一个参数被称为“环境”。当我进入管道的“设置”时,我会看到服务角色arn
,其中有一个链接,指向IAM角色,该角色实际上包含我们的MyReadOnlySecretServer
。当我进入CodeBuild>buildprojects>link\u to\u my\u project\u,并将\u codepippeline\u作为\u source\u provider>Build details>Environment>Service Role
时,会有一个链接将我引向在代码管道设置的Service Role arn
中链接的同一IAM角色。我现在想,可能更容易引用Secret管理器使用buildspec.yml
文件中的env:secrets管理器:
,或通过设置CodeBuild
设置中的环境变量,但在这两种情况下,我都不确定如何正确引用机密管理器的机密。尝试使用env:secrets Manager:
时,我在生成过程中遇到了相同的错误,但它在其他所有操作之前崩溃。确实存在权限边界
,而且它确实没有提到任何secretsmanager:GetSecretValue
。我必须对此进行调查,并向您提供最新信息。我确认:确实是链接的权限边界
与CodeStar
项目相关,该项目限制了CodeBuild
的有效权限。我刚刚编辑了附加的权限边界
到CodeStarWorker blabla工具链
,并添加了“secretsmanager:GetSecretValue”
操作
,以及错误中提到的相应的资源
(即:arn:aws:secretsmanager:REGION:SOME\u ID:secret:ID\u OF\u OUR\u secret\u JSON
)。非常感谢!
version: 0.2
phases:
install:
runtime-versions:
java: openjdk8
commands:
# Upgrade AWS CLI to the latest version
- pip install --upgrade awscli
pre_build:
commands:
- cd $CODEBUILD_SRC_DIR
- mvn clean compile test # commenting this "test" makes it run properly
build:
commands:
- mvn war:exploded
post_build:
commands:
- cp -r .ebextensions/ target/ROOT/
- aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template-file template-export.yml
# Do not remove this statement. This command is required for AWS CodeStar projects.
# Update the AWS Partition, AWS Region, account ID and project ID in the project ARN on template-configuration.json file so AWS CloudFormation can tag project resources.
- sed -i.bak 's/\$PARTITION\$/'${PARTITION}'/g;s/\$AWS_REGION\$/'${AWS_REGION}'/g;s/\$ACCOUNT_ID\$/'${ACCOUNT_ID}'/g;s/\$PROJECT_ID\$/'${PROJECT_ID}'/g' template-configuration.json
artifacts:
type: zip
files:
- target/ROOT/**/*
- .ebextensions/**/*
- 'template-export.yml'
- 'template-configuration.json'