Dockerun.aws.json referindo-se ao bucket de outra conta

4

Eu tenho o seguinte Dockerrun.aws.json :

{
   "AWSEBDockerrunVersion": "1",
   "Authentication": {
       "Bucket": "bucket-of-another-aws-account",
       "Key": "docker/.dockercfg"
   },
   "Image": {
       "Name": "docker-image"
   },
   "Ports": [
        {
            "ContainerPort": "8080"
        }
    ]
}

O ambiente do Elastic Beanstalk com nosso contêiner do Docker está em execução na conta do AWS do cliente e o bucket do S3 com o .dockercfg pertence à nossa conta da AWS.

Para fins de teste, defino o princípio da política de buckets como * para que qualquer pessoa possa fazer o download do arquivo .dockercfg . No entanto, o Elastic Beanstalk não é capaz de baixar esse arquivo (" Failed to download authentication credentials docker/.dockercfg from bucket-of-another-aws-account ").

O próximo teste foi mover o arquivo para um bucket S3 na conta da AWS do cliente. Isso funcionou.

A pergunta é: é possível usar um intervalo de outra conta no Dockerrun.aws.json ? Não encontrei nenhuma sugestão na documentação e não quero fornecer a chave da API do DockerHub aos nossos clientes.

    
por Alexander 01.12.2014 / 13:51

1 resposta

0

Conseguimos superar o "Falha ao fazer o download de credenciais de autenticação" como este:

1) Na conta B (aquela que tenta acessar o intervalo remoto), procure nas configurações dos ambientes do Elastic Beanstalk o nome da função da instância que está usando (configuração, instâncias (cog), perfil da Instância)

2) Ainda na conta B, no gerente do IAM, vá para Funções e encontre a função ec2 da etapa anterior que o EB está usando para as instâncias e anexe uma política in-line

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "BucketAccess",
            "Effect": "Allow",
            "Action": [
                "s3:List*",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-of-another-aws-account"
            ]
        },
        {
            "Sid": "S3ObjectAccess",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-of-another-aws-account/*"
            ]
        }
    ]
}

3) no bucket s3 de destino na Conta A anexar uma política (onde 222222222222 é o número da sua conta B)

{
    "Version": "2012-10-17",
    "Statement": {
        "Sid": "AccountBAccess1",
        "Effect": "Allow",
        "Principal": {
            "AWS": "222222222222"
        },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::bucket-of-another-aws-account",
            "arn:aws:s3:::bucket-of-another-aws-account/*"
        ]
    }
}

Eu sei que é uma resposta tardia para o OP (me fez pensar em link ), mas também não consegui encontrar nenhuma resposta concisa ou definitiva responda nos documentos on-line e com mais pessoas mudando para AWS e Elastic Beanstalk, espero que isso possa ser útil para outras pessoas!

    
por 21.02.2017 / 19:24