[*] Wenn ich EU-west-1 als Region verwende, wenn ich Assume_ROLE (sts) verwende, und dann die Anfrage für API-Gateway in EU-South-2 (wobei die API die Anforderung für API-Gateway unterschreibt, fehlschlägt die Anforderung. Ungültige "}
Wenn ich die STS-Client-Region in EU-South-2 ändere, so dass es mit der API-Region übereinstimmt, erfolgreich.
Code: Select all
import boto3
import requests
from aws_requests_auth.aws_auth import AWSRequestsAuth
from urllib.parse import urlparse
ROLE_ARN = "..."
SESSION_NAME = "..."
API_GATEWAY_ENDPOINT = "..."
def assume_role(role_arn, session_name, region):
sts_client = boto3.client('sts', region_name=region)
response = sts_client.assume_role(RoleArn=role_arn, RoleSessionName=session_name)
credentials = response['Credentials']
return credentials
def call_api(api_url, credentials, region):
auth = AWSRequestsAuth(aws_access_key=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_token=credentials['SessionToken'],
aws_host=urlparse(API_GATEWAY_ENDPOINT).netloc,
aws_region=region,
aws_service='execute-api')
response = requests.get(api_url, auth=auth)
print("Status Code:", response.status_code)
print("Response Body:", response.text)
def main():
creds = assume_role(ROLE_ARN, SESSION_NAME, "eu-west-1")
call_api(API_GATEWAY_ENDPOINT, creds, "eu-south-2")
if __name__ == "__main__":
main()
Mobile version