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'