【问题标题】:Spinnaker + ECR access大三角帆 + ECR 访问
【发布时间】:2019-11-22 23:42:20
【问题描述】:

我在设置具有 ECR 访问权限的 Spinnaker 时遇到问题。

背景:我在 EKS 集群上使用 helm 安装了 spinnaker,并且我已确认该集群具有必要的 ECR 权限(通过在 clouddriver pod 中手动运行 ECR 命令)。我正在按照此处的说明设置 Spinnaker+ECR:https://www.spinnaker.io/setup/install/providers/docker-registry/

问题:当我运行时:

hal config provider docker-registry account add my-ecr-registry \
--address $ADDRESS \
--username AWS \
--password-command "aws --region us-west-2 ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken' | base64 -d | sed 's/^AWS://'"

我得到以下输出:

+ Get current deployment
  Success
- Add the some-ecr-registry account
  Failure
Problems in default.provider.dockerRegistry.some-ecr-registry:
- WARNING Resolved Password was empty, missing dependencies for
  running password command?
- WARNING You have a supplied a username but no password.
! ERROR Unable to fetch tags from the docker repository: code, 400
  Bad Request
? Can the provided user access this repository?
- WARNING None of your supplied repositories contain any tags.
  Spinnaker will not be able to deploy any docker images.
? Push some images to your registry.
Problems in halconfig:
- WARNING There is a newer version of Halyard available (1.28.0),
  please update when possible
? Run 'sudo apt-get update && sudo apt-get install
  spinnaker-halyard -y' to upgrade
- Failed to add account some-ecr-registry for provider
  dockerRegistry.
  • 我已确认在 clouddriver pod 上安装了 aws-cli。而且我已经确认我可以直接从 clouddriver pod 输入密码命令,并且它成功返回了一个令牌。
  • 我还确认,如果我手动生成 ECR 令牌和run hal config provider docker-registry account add my-ecr-registry --address $ADDRESS --username AWS --password-command "echo $MANUALLY_GENERATED_TOKEN",一切正常。所以有一些特定于密码命令的东西出错了,我不知道如何调试它。
  • 另一个奇怪的行为:如果我将密码命令简化为:hal config provider docker-registry account add some-ecr-registry --address $ADDRESS --username AWS --repositories code --password-command "aws --region us-west-2 ecr get-authorization-token",我会得到一个附加的输出,上面写着"- WARNING Password command returned non 0 return code stderr/stdout was:bash: aws: command not found"。此输出仅针对此简化命令显示。

任何关于如何调试它的建议将不胜感激。

【问题讨论】:

标签: amazon-web-services kubernetes spinnaker amazon-ecr


【解决方案1】:

如果你的 ECR 注册中心和我一样在另一个账户中,那么你必须强制承担注册中心所在目标账户的角色

passwordCommand: read -r AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN <<< `aws sts assume-role --role-arn arn:aws:iam::<AWS_ACCOUNT>:role/<SPINNAKER ROLE_NAME> --query "[Credentials.AccessKeyId, Credentials.SecretAccessKey, Credentials.SessionToken]" --output text --role-session-name spinnakerManaged-w2`; export AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN; aws ecr get-authorization-token --region us-west-2 --output text --query 'authorizationData[].authorizationToken' --registry-ids <AWS_ACCOUNT> | base64 -d | sed 's/^AWS://'

感谢https://github.com/spinnaker/spinnaker/issues/5374#issuecomment-607468678

【讨论】:

    【解决方案2】:

    我还在 AKS 上安装了 Spinnaker,我所做的只是使用具有正确 AWS IAM 策略的 AWS 管理用户对 ECR:* 我可以直接访问 ECR 存储库。 我不认为 hal 基于 java 会在 --password-command 中执行 Bash 命令

    • 在您的三角帆部署中设置AWS ECS provider
    • 使用以下 AWS IAM 策略 (SpinnakerManagingPolicy) 附加到 AWS 管理用户以授予对 ECR 的访问权限。请根据您的需要更换 AWS 账户。
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:*",
                    "cloudformation:*",
                    "ecr:*"                
                ],
                "Resource": [
                    "*"
                ]
            },
            {
                "Action": "sts:AssumeRole",
                "Resource": [
                    "arn:aws:iam::123456789012:role/SpinnakerManagedRoleAccount1",
                    "arn:aws:iam::101121314157:role/SpinnakerManagedRoleAccount2",
                    "arn:aws:iam::202122232425:role/SpinnakerManagedRoleAccount3"
                ],
                "Effect": "Allow"
            }
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多