2017-10-17 201 views
0

我有一個使用另一個AWS賬戶的雅典娜數據的lambda。所以我有一個我的lambda假定具有跨賬戶訪問權限的角色。我在我的lambda中使用了STS客戶端。有時lambda運行得非常好,有時會打破並給我這個錯誤。Aws lambda跨賬戶訪問

「的errorMessage」: 「發生錯誤(ExpiredTokenException)調用StartQueryExecution操作時:包括在請求安全令牌過期」, 「ERRORTYPE」: 「ClientError」,

STS客戶端我在代碼中使用的是:

def assume_role_to_session(role_arn, session_name): 
client = boto3.client('sts') 
response = client.assume_role(RoleArn=role_arn, RoleSessionName=session_name, DurationSeconds=900) 
return boto3.Session(
    aws_access_key_id=response['Credentials']['AccessKeyId'], 
    aws_secret_access_key=response['Credentials']['SecretAccessKey'], 
    aws_session_token=response['Credentials']['SessionToken'], 
    region_name='us-east-1') 
assume_role_athena_session = assume_role_to_session(role_arn='arn:aws:iam::XXXXXXXXXXX:role/role-name', 
            session_name='AthenaLambdaSession') 

這是如何工作的?我希望我的lambda可以隨時運行,而不僅僅是有時。可能是什麼問題呢?

回答

0

看​​

RoleSessionName(字符串) - [REQUIRED]

爲假定角色會話的標識符。

使用角色會話名稱唯一標識會話當不同主體或由於不同原因採用相同的 角色時。在 跨帳戶方案中,角色會話名稱對於擁有該角色的帳戶是可見的,並且可以由該帳戶擁有角色會話名稱 。角色會話名稱 也用於假定的角色主體的ARN中。這意味着使用臨時安全 憑據的後續跨帳戶API請求將在其CloudTrail日誌中將角色會話名稱公開給外部帳戶 。

所以儘量用獨特RoleSessionName更換AthenaLambdaSession。或者,如果您想重新使用現有會話,請嘗試檢查會話超時以確保有足夠的時間執行您的lambda任務(最多5分鐘)。如果< 5分鐘,重新它。