API Gateway HTTP API에 대한 교차 계정 IAM 권한 부여를 제공하려면 어떻게 해야 합니까?

3분 분량
0

Amazon API Gateway HTTP API에 대한 크로스 계정 액세스를 위해 AWS Identity and Access Management(IAM) 인증을 활성화하려고 합니다. 어떻게 설정해야 하나요?

간략한 설명

API Gateway REST API의 경우 리소스 정책을 사용하여 교차 계정에 대한 IAM 인증을 제공할 수 있습니다. 하지만 API Gateway HTTP API에는 이 옵션을 사용할 수 없습니다.

sts:AssumeRole API 작업을 사용하여 HTTP API 계정에 대한 역할을 위임할 수 있습니다. 위임된 역할은 다른 계정에서 HTTP API를 호출하는 데 사용할 수 있는 임시 보안 인증 정보를 제공합니다.

해결 방법

IAM 임시 보안 인증 생성

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

1.    HTTP API를 호스팅하는 계정 A에 대한 IAM 정책을 생성합니다. 이 정책은 HTTP API execute-api ARN에 대한 호출 권한을 제공합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke",
            ],
            "Resource": [
                "arn:aws:execute-api:us-east-1:<AccountA-id>:<Api-id>/$default/*/*"
            ]
        }
    ]
}

2.    계정 A에서 IAM 역할을 생성하고 '신뢰할 수 있는 엔터티 유형'을 'AWS 계정'으로 추가한 다음 계정 B의 ID를 입력합니다.

3.    1단계에서 생성한 IAM 정책을 2단계에서 생성한 IAM 역할에 연결합니다.

4.    계정 B에 대한 IAM 정책을 생성하여 sts:AssumeRole API 작업을 허용합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::<AccountA-id>:role/<AssumedRoleName>"
    }
  ]
}

5.    계정 B의 사용자에 IAM 정책을 연결합니다.

6.    다음과 유사한 AWS CLI 명령 assume-role를 실행합니다.

$ aws sts assume-role --role-arn arn:aws:iam::<account-id>:role/<AssumedRoleName> --role-session-name role_session

예시 출력

{
    "Credentials": {
        "AccessKeyId": "A1B2C3D4E5E6G7H8J9K0",
        "SecretAccessKey": "abcdefghijk123456789",
       
 "SessionToken": 
"11111111111122222222223333333333344444444455555566666667777777777778888888999999999aaaaaaaaaabbbbbbbbbcccccccc==",
        "Expiration": "2022-07-11T15:55:25+00:00"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "AAAAAAABBBBBBBBBBB:role_session",
        "Arn": "arn:aws:sts::<account-id>:assumed-role/<AssumedRoleName>/role_session"
    }
}

AccessKeyId, SecretAccessKeySessionToken의 보안 인증 객체를 확인합니다. 위임된 역할에서 제공하는 이러한 임시 보안 인증 정보를 사용하여 HTTP API를 호출할 수 있습니다.

IAM 인증 테스트

Postman 앱을 사용하여 IAM 인증을 활성화한 메서드를 통해 API 리소스에 요청을 보냅니다.

참고: 다른 도구 또는 환경을 사용하여 API Gateway로 전송되는 요청을 수동으로 인증하려면 Signature Version 4(SigV4) 서명 프로세스를 사용합니다. 자세한 내용은 AWS API 요청 서명을 참조하세요.

1.    Postman에서 권한 부여 탭을 선택하고 다음을 수행합니다.
유형에서 AWS 서명을 선택합니다.
AccessKey, SecretKeySessionToken의 경우 assume-role API 호출의 값을 입력합니다.

2.    요청 URL 입력에 다음과 유사한 API의 호출 URL을 입력합니다.

https://<Api-id>.execute-api.<region>.amazonaws.com/<stagename>/<resourcepath>

인증된 요청은 200 OK 응답 코드를 반환합니다. 권한 없는 요청은 인증 토큰 누락 메시지와 403 Forbidden 응답 코드를 반환합니다.


관련 정보

API Gateway REST API에 대한 IAM 인증을 활성화하려면 어떻게 해야 합니까?