ECS]Envoy를 에지 에이전트로 AWS 서비스에 연결하는 방법(2)
개요
ECS에서 시작하는 Envoy 컨테이너를 에지 에이전트로 AWS 서비스에 액세스하는 방법 정리
이 기사는 Cognito에서 액세스한 토큰을 확인합니다.
사용저번 보도 환경
용기의 제작
샘플 코드 여기 있습니다.
Port10000은 S3 서비스의 청취자입니다.
Port 10001은 Api Gateway 서비스의 청취자입니다.
S3 설정 발췌
Jwt Authentication 필터로 서명, 유효기간, iss 유효성 검사, "payload in metadata: jwt-payload"에 Dynamic Metadata에 정보 저장
이 정보를 참조하여 Lua 필터 client인증 id, scope
http_filters:
- name: envoy.filters.http.jwt_authn
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthentication
providers:
cognito:
issuer: "${JWT_ISSUER}"
forward_payload_header: jwt-payload
payload_in_metadata: jwt-payload
remote_jwks:
http_uri:
uri: "${JWT_JWK_URI}"
cluster: jwks
timeout: 5s
cache_duration: 600s
rules:
- match:
prefix: '/'
requires:
provider_name: cognito
- name: envoy.filters.http.lua
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
inline_code: |
-- Called on the request path.
function envoy_on_request(request_handle)
-- Do something.
local jwt_client = request_handle:streamInfo():dynamicMetadata():get('envoy.filters.http.jwt_authn')['jwt-payload']['client_id']
local jwt_scope = request_handle:streamInfo():dynamicMetadata():get('envoy.filters.http.jwt_authn')['jwt-payload']['scope']
if jwt_client == nil or jwt_client ~= '"${JWT_CLIENT}"' then
request_handle:respond({[':status'] = '401'}, 'unauthorized_client_error:')
end
if jwt_scope == nil or jwt_scope ~= 's3/access' then
request_handle:respond({[':status'] = '401'}, 'unauthorized_scope_error')
end
end
컨테이너의 실행
ECS를 사용하지 않고 로컬에서 확인 작업을 시작할 수 있습니다.
export AWS_ACCESS_KEY_ID=xxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxx
export AWS_S3_ENDPOINT=samplebktenvoytest.s3.ap-northeast-1.amazonaws.com
export AWS_APIGW_ENDPOINT=apigwid.execute-api.ap-northeast-1.amazonaws.com
export AWS_REGION=ap-northeast-1
export JWT_ISSUER=https://cognito-idp.ap-northeast-1.amazonaws.com/userpoolid
export JWT_CLIENT=client_id
export JWT_JWK_URI=https://cognito-idp.ap-northeast-1.amazonaws.com/userpoolid/.well-known/jwks.json
export JWT_ISSUER_HOST=cognito-idp.ap-northeast-1.amazonaws.com
docker build -t envoy:v1 .
docker run --rm --name envoy -p 9901:9901 -p 10000:10000 -p 10001:10001 -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY -e AWS_S3_ENDPOINT=$AWS_S3_ENDPOINT -e AWS_REGION=$AWS_REGION -e AWS_APIGW_ENDPOINT=$AWS_APIGW_ENDPOINT -e JWT_ISSUER=$JWT_ISSUER -e JWT_CLIENT=$JWT_CLIENT -e JWT_JWK_URI=$JWT_JWK_URI -e JWT_ISSUER_HOST=$JWT_ISSUER_HOST envoy:v1
추가 케이스로 연결 확인curl -H 'Authorization: Bearer accesstoken_string' http://localhost:10000/test.txt
curl -H 'Authorization: Bearer accesstoken_string' -H 'Content-type: application/json' -d '{"Name": "Jone"}' http://localhost:10001/proxy-test
후속 기사에 SSL 설정이 기재되어 있음관련 보도
참조 링크
Reference
이 문제에 관하여(ECS]Envoy를 에지 에이전트로 AWS 서비스에 연결하는 방법(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/tubame/articles/4e7b2b7efb9b2b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)