簡體   English   中英

Boto3 在本地承擔角色,因為 ECS 任務將用於測試目的

[英]Boto3 Assume Role locally as ECS task will Do for testing purposes

我目前正在開發將使用 boto3 和 python 部署在 ECS 中的 Flask 應用程序。

目前,為了開發它,我有一個 python 環境,我在其中編寫不同的功能並與 boto3 API 交互,使用 .aws / 憑證文件中的配置文件承擔角色:

iam = boto3.Session (profile_name = "account_alias", region_name = 'eu-west-1'). client ('iam')

但是,要在 ECS 中部署它,我必須將所有這些會話更改為這樣的內容,以便由任務的角色承擔:

try:
    sts_client = boto3.client ('sts')
    assumed_role_object = sts_client.assume_role (
        RoleArn = "arn: aws: iam ::" + str (Account) + ": role /" + str (Role)
except Exception as e:
    logging.exception ("Could NOT assume role in account:% s", Account)

credentials = assumed_role_object ['Credentials']

boto3_session = boto3.session.Session (
    aws_access_key_id = credentials ['AccessKeyId'],
    aws_secret_access_key = credentials ['SecretAccessKey'],
    aws_session_token = credentials ['SessionToken'],
)

這使得它無法在本地測試它(不可能假設)並在部署它時導致許多錯誤(創建 ECR 而不測試它)。

有沒有辦法以與 ECS 中的任務相同的方式在本地承擔沒有配置文件的角色?

謝謝你。

我建議您創建一個名稱一致的角色,該角色將存在於所有目標帳戶中。 制定該角色的信任策略,以便您自己的憑據可以承擔它(您用於默認配置文件的訪問密鑰和機密)。 然后,您可以使用相同的邏輯在本地開發期間承擔角色,而無需更改任何內容。 本質上,不是使用具有不同憑據的本地配置文件,而是使用一個有權在每個目標帳戶中承擔角色的憑據。 我曾在一個有同樣問題的環境中工作過,這樣做可以讓我擁有與部署相同的本地代碼。

您的本地代碼沒有理由也不能擔任角色,如果擔心在所有這些目標帳戶中扮演可以擔任的角色,請考慮使用不同的配置文件(我假設,具有不同的憑據),您必須已經可以通過擔任該角色來執行您將要做的事情。 如果該角色的權限超出您應有的權限,則創建一個新角色,以便您在本地和 AWS 中擔任不同的角色。 但至少這將允許您使用相同的代碼——只是傳入不同的角色名稱變量。

如果您希望代碼相同,您要么需要讓 ECR 使用使用配置文件,要么讓 localhost 使用承擔角色,我相信讓 localhost 使用承擔角色比讓 ECR 任務設置為使用配置更容易.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM