IAM 인증 RDS, 비 VPC 람바다, API Gateway, CloudFront, WAF를 통해 연결원 IP 제한이 있는 API 제작
11083 단어 AWS
RDS 연결 인증에서 IAM 사용 가능
이게 어떻게 된 일입니까?
MySQL의 인증 플러그인을 만들어 RDS 이미지에 미리 넣었다고 한다.
select * from plugin;
+-------------------------+-------------+
| name | dl |
+-------------------------+-------------+
| AWSAuthenticationPlugin | aws_auth.so |
+-------------------------+-------------+
1 row in set (0.01 sec)
같은 물건을 PostgreSQL로 만들 수 있다면 PostgreSQL도 IAM 인증을 사용할 수 있죠?(알 수 없는 희망)너는 그 무엇을 좋아하니?
MySQL의 user/password 인증은 AWS입니다.ACCESS_KEY_ID 및 AWSACCESS_SECRET_케이로 바뀐 것 같아.
...그렇다면'그건 이런'사건이지만 특정 IAM 캐릭터만 보유한 비VPC 람바다의 방문을 허용하는 RDS MySQL을 만들 수 있게 돼 기쁜 점이다.
MySQL에 내장된 인증 기관보다 안전한 방법을 사용하면 RDS를 Public Access sible로 만들 수 있다는 말도 있다.RDS가 Public Access sible이면 Lambda도 비 VPC를 사용할 수 있습니다.그리고 그 람보도 특정 IAM 캐릭터를 가진 것에 한정돼 있어요.마음 놓으세요.
하고 싶은 일
RDS (IAM & SSL) | AWS Lambda (IAM) | API Gateway (https) | CloudFront (https) | Web Application Firewall
의 구성.사내 API 같은 거죠?등장인물은 많지만 다음과 같은 경우도 있다
그러므로
API Gateway 자체와 관련해서는 방문을 제한하기 위해 API Token이 필요하다.물론 클라우드 프론트에 접근할 수 없기 때문에 오리진 설정에서 API Token을 헤더에 추가해야 합니다.귀찮아.
그나저나 API Gateway의 인증도 IAM으로 설정할 수 있지만, 이렇게 되면 API 사용자는 AWS v4 Signature Auth를 실현할 수 있어 마음이 괴롭다.
해보자.
RDS 만들기
IAM Database Authentication for MySQL and Amazon Aurora
IAM 인증은 db입니다.m1.smill보다 큰 실례에서만 사용할 수 있음을 주의하십시오.사용자의 제작 방법도 문서에서 유지
CREATE USER jane_doe IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS' REQUIRE SSL;
DB와 람바다 사이에 SSL이 필요하기 때문에REQUIRE SSL
추가 옵션은 SSL을 강제로 적용합니다.제작
Lambdaのレンジ:3306
된 In Allow의 SecGroup, Lambda의 범위가 넓은 것 같다고?https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-ip-ranges.html
람바다 만들기.
시작 람다는...
from __future__ import print_function
import os
import boto3
import mysql.connector
def lambda_handler(event, context):
print(event, context)
token = boto3.client('rds').generate_db_auth_token(
DBHostname=os.environ['RDS_HOST'],
Port=3306,
DBUsername=os.environ['RDS_USER']
)
conn = mysql.connector.connect(
host=os.environ['RDS_HOST'],
user=os.environ['RDS_USER'],
password=token,
database=os.environ['RDS_DATABASE'],
ssl_verify_cert=True,
ssl_ca='rds-combined-ca-bundle.pem'
)
cursor = conn.cursor()
cursor.execute('SELECT user FROM mysql.user')
rows = cursor.fetchall()
result = [str(x[0]) for x in rows]
return {'users': result}
DB의 사용자SELECT
만 반환하면 됩니다.Lambda를 실행하려면 IAM 역할에 IAM Database Auth 정책이 필요합니다.
Attaching an IAM Policy Account to an IAM User or Role
arn:aws:rds-db:region:account-id:dbuser:dbi-resource-id/database-user-name
여기, 나는 MySQL의GRANT
와 ON
를 지정한 것 같다고 생각한다.Lambda를 실행하는 다른 IAM 역할을 추가해 DB 연결 오류가 성공적으로 발생했습니다.
zip으로 람바다 정리하기.
제작
TO
zip을 생성한 Nau는 젊은이들에게 가장 앞선 멋쟁이다.디버그 중에 비VPC를 선택합니다.FROM amazonlinux
RUN yum install -y python27-devel python27-pip zip
RUN pip install --upgrade pip
RUN mkdir /opt/rds-iam-auth /opt/build
COPY ./ /opt/rds-iam-auth/
WORKDIR /opt/rds-iam-auth
RUN pip install wheel
RUN pip install -r requirements.txt -t .
RUN zip -r rds-iam-auth.zip *
CMD cp rds-iam-auth.zip /opt/build
안타깝게도 람다에 들어온 아마존 linux의 보토3은 IAM RDS auth와 대응하지 않아Dockerfile
메모했다.요즘 AMI도 업데이트되죠.하다
콘솔에서 째깍째깍 하는 일이 많다.여기에 특별히 추기할 것은 없기 때문에 이전 사람들의 보도를 참고하고 싶다.
requirement.txt
을 추가한다.시험해 보다
WAF는 사내 글로벌 IP 접속만 허용한다.
$ curl https://hoge.cloudfront.net/
{"users": ["helloworld", "iamuser1", "mysql.sys", "rdsadmin"]}
WiFi를 바꾸고 Global IP를 바꾸면$ curl https://hoge.cloudfront.net/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Request blocked.
<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: jIG5TSJUn9rPZYI0JwUr9wZHFHFa_LRyVmwGC302sHjBgv0sLoPubA==
</PRE>
<ADDRESS>
</ADDRESS>
</BODY></HTML>
Forbidden에게총결산
AWS 잘하네.
Reference
이 문제에 관하여(IAM 인증 RDS, 비 VPC 람바다, API Gateway, CloudFront, WAF를 통해 연결원 IP 제한이 있는 API 제작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/makisyu/items/80a9455305e30209a781텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)