zalando-stups/taupage

Expose IID for docker registry authentication

ZroMnc opened this issue · 3 comments

User Story

As Developer.
I want to to deploy my application on AWS without the necessity of an OAuth2 access_token. Instead I want to use the IID or Instance Identity Document.
So that my instance can prove to pierone that it is whoever it claims to be and the pull is legitimate. Because I can use the client created for solely Service-2-Service communication.

Acceptance criteria

  • The IID is send to pierone to pull a image
  • The config.json for docker is created on instance startup and is available to processes requiring access (docker)
  • The updated taupage version is created, released and rolled out so delivery teams an redeploy and use IIDs for auth towards pierone.

Information/ Details

Details can be found in issue so pierone accepts IIDs as authentication mechanism - Enable download of Docker Images based on presented AWS IIDs #132

TL;DR

IID details need to be send to the docker registry when pulling docker images without involving IAM OAuth2 tokens. This allows the docker daemon to use the config (see below) when attempting to pull an image.

Example Docker config.json

#!/bin/sh

username=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | base64)
password=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/pkcs7 | base64)

echo ‘{
    "auths": {
        "https://pierone.stups.zalan.do/v1/": {
            "auth": "$username’:’$password"
        },
    }
}’ > ~/.docker/config.json

Links

Raffo commented

@tuxlife @cgmv What is the need of having the content as username instead of a placeholder (basically any string)? Also, what is the need to base64 encode the pkcs7?

I would also just use the PKCS7 signature which is already base64 encoded:

http://169.254.169.254/latest/dynamic/instance-identity/pkcs7

MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE

Then the auth string could be something like:

echo ‘{
    "auths": {
        "https://pierone.stups.zalan.do/v1/": {
            "auth": "instance-identity-document:MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE"
        },
    }
}’ > ~/.docker/config.json

This ofc. means Pier One can't look at the document as it is not in plaintext anymore, but it should not need to read any of the information in this document anyway as it just passes it on to the "verify IID service" (Cluster Registry).