Boto3 akan mencoba mengautentikasi secara otomatis menggunakan IAM role yang ditetapkan pada kontainer melalui ketentuan tugas ECS, dan jika gagal, Boto3 akan kembali menggunakan IAM role yang terkait dengan host EC2 yang menjalankan kontainer.
Anda dapat melihat IAM role mana yang aktif pada masing-masing peran dengan menambahkan perintah berikut ke langkah pembangunan:
echo "EC2 IAM role"
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
echo
echo "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI = $AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
curl http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
Perintah curl ini mengambil IAM role saat ini dari meta data EC2, lalu dari meta data container. Env var AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
disetel secara otomatis untuk container yang berjalan di bawah ECS.
Jika Anda menjalankan perintah ini dalam langkah build non-kontainer, kedua peran tersebut akan ditampilkan. Jika Anda menjalankan boto3 dengan cara yang sama, ia akan memilih peran container jika ditemukan, dan kemudian kembali ke peran EC2.
Sekarang centang "Jalankan langkah dalam wadah Docker" dan tentukan gambar dasar arbitrer seperti library/python:2.7.15-stretch
.
Kali ini, Anda akan melihat bahwa IAM role EC2 yang sama dikeluarkan, tetapi AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
env var tidak disetel, sehingga tidak ada IAM role kontainer yang ditemukan. Kami menginginkan peran IAM yang telah ditetapkan pada agen pembangunan TeamCity.
Dalam kasus kami, karena boto3 tidak menemukan peran IAM ECS, peran tersebut kembali ke peran IAM EC2, dan peran tersebut tidak memiliki hak istimewa yang cukup untuk melakukan operasi boto, sehingga gagal.
Perbaikannya
Cara mengatasinya adalah dengan menggunakan "Argumen pengoperasian buruh pelabuhan tambahan:" untuk meneruskan env var dari kontainer buruh pelabuhan TeamCity ke dalam kontainer buruh pelabuhan yang dijalankannya untuk menjalankan langkah pembangunan. Edit langkah build yang berisi perintah pengujian untuk dimiliki:
-e AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
Sekarang kontainer langkah pembangunan akan dengan benar mewarisi peran IAM kontainer dari kontainer agen pembangunan dan boto3 akan berfungsi seperti yang diharapkan.
person
tul
schedule
11.05.2018