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

2분 분량
0

Amazon API Gateway HTTP API에 대한 교차 계정 액세스를 위해 AWS IAM(Identity and Access Management) 인증을 활성화하려고 합니다.

간략한 설명

API Gateway HTTP 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 인증을 활성화하려면 어떻게 해야 하나요?