RDS Proxy를 위한 IAM 인증 구성하기
RDS Proxy를 위한 IAM 인증 구성하기 (Configuring IAM authentication for RDS Proxy)
Amazon RDS의 RDS Proxy에 AWS Identity and Access Management(IAM) 인증을 설정하려면 필요한 권한을 부여하는 IAM 정책을 만들고 구성해야 해요. 이 페이지에서 그 방법을 설명해요.
출처: 문서
본문
Amazon RDS의 RDS Proxy에 AWS Identity and Access Management(IAM) 인증을 설정하려면 필요한 권한을 부여하는 IAM 정책을 만들고 구성해요. 이 주제는 필요한 IAM 정책을 만들고 이를 IAM 역할에 연결하는 방법을 포함해 RDS Proxy의 IAM 인증을 구성하는 단계를 제공해요.
팁
이 절차는 직접 IAM 역할을 만들고 싶을 때만 필요해요. 그렇지 않으면 RDS가 프록시를 설정할 때 필요한 역할을 자동으로 만들 수 있으므로 이 단계를 건너뛰어도 돼요.
사전 조건 (Prerequisites)
RDS Proxy에 IAM 인증을 설정하기 전에 다음 항목이 있는지 확인하세요.
- AWS Secrets Manager – 데이터베이스 자격 증명이 담긴 저장된 시크릿이 최소 1개. 시크릿 생성 지침은 RDS Proxy를 위한 데이터베이스 자격 증명 설정하기(Setting up database credentials for RDS Proxy)를 참조하세요.
- 엔드투엔드 IAM 인증을 사용한다면 이것은 필요하지 않아요.
- IAM 권한 – AWS Secrets Manager에서 IAM 정책, 역할, 시크릿을 생성하고 관리할 수 있는 권한이 있는 IAM 역할 또는 사용자.
엔드투엔드 IAM 인증을 위한 IAM 정책 생성하기 (Creating an IAM policy for end-to-end IAM authentication)
엔드투엔드 IAM 인증을 사용할 때 RDS Proxy는 Secrets Manager에서 자격 증명을 가져오는 대신 IAM 인증을 사용해 데이터베이스에 연결해요. 이렇게 하려면 프록시와 함께 사용하려는 데이터베이스 계정에 대해 rds-db:connect 권한을 부여하도록 IAM 역할을 구성해야 해요.
IAM을 사용해 RDS Proxy를 데이터베이스에 인증하려면 필요한 데이터베이스 연결 권한을 부여하는 정책이 있는 IAM 역할을 만들어요.
프록시와 함께 엔드투엔드 IAM 인증에 사용할 역할을 생성하려면
-
AWS Management Console에 로그인하고 https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.
-
역할에 대한 권한 정책을 만듭니다. 일반적인 단계는 IAM 정책 생성하기(콘솔)(Create IAM policies (console))를 참조하세요.
-
이 정책을 JSON 편집기에 붙여 넣고 다음 내용을 변경합니다.
- 자신의 계정 ID로 바꿉니다.
us-east-2를 프록시가 위치해야 하는 리전으로 바꿉니다.- 사용하려는 데이터베이스 리소스 ID와 사용자 이름으로 바꿉니다. 리소스 ID 형식은 RDS 인스턴스와 Aurora 클러스터에 따라 다릅니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rds-db:connect", "Resource": [ "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1", "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2" ] } ] } -
역할을 만들고 해당 권한 정책을 연결합니다. 일반적인 단계는 AWS 서비스에 권한을 위임할 역할 생성하기(Create a role to delegate permissions to an AWS service)를 참조하세요.
- Trusted entity type(신뢰할 수 있는 엔터티 유형)에서 AWS service를 선택합니다.
- Use case(사용 사례)에서 RDS를 선택하고 사용 사례로 RDS - Add Role to Database를 선택합니다.
- Permissions policies(권한 정책)에서 만든 정책을 선택합니다.
- Select trusted entities(신뢰할 수 있는 엔터티 선택)에서 역할에 대해 다음 신뢰 정책을 입력합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
AWS CLI로 역할을 만들려면 다음 요청을 보내요.
aws iam create-role \
--role-name my_e2e_iam_role_name \
--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}'
그런 다음 정책을 역할에 연결해요.
aws iam put-role-policy \
--role-name my_e2e_iam_role_name \
--policy-name e2e_iam_db_connect_policy \
--policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "rds-db:connect",
"Resource": [
"arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1",
"arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2"
]
}
]
}'
엔드투엔드 IAM 인증을 위한 IAM 역할과 권한을 구성했다면 이제 DefaultAuthScheme을 IAM_AUTH로 설정한 프록시를 만들 수 있어요. 이 프록시는 Secrets Manager 시크릿 없이 IAM을 사용해 데이터베이스에 직접 인증해요. 자세한 내용은 Amazon RDS용 프록시 생성하기(Creating a proxy for Amazon RDS)를 참조하세요.
엔드투엔드 IAM 인증을 사용할 때는 IAM 인증을 사용해 데이터베이스 계정 생성하기(Creating a database account using IAM authentication)에 설명된 대로 데이터베이스 사용자가 IAM 인증용으로 구성되어 있는지 확인하세요.
Secrets Manager 액세스를 위한 IAM 정책 생성하기 (Creating an IAM policy for Secrets Manager access)
RDS Proxy가 Secrets Manager에서 데이터베이스 자격 증명을 검색하도록 허용하려면 필요한 권한을 부여하는 정책이 있는 IAM 역할을 만들어요.
프록시에서 사용할 시크릿에 접근할 역할을 생성하려면
-
AWS Management Console에 로그인하고 https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.
-
역할에 대한 권한 정책을 만듭니다. 일반적인 단계는 IAM 정책 생성하기(콘솔)(Create IAM policies (console))를 참조하세요.
-
이 정책을 JSON 편집기에 붙여 넣고 다음 내용을 변경합니다.
- 자신의 계정 ID로 바꿉니다.
us-east-2를 프록시가 위치할 리전으로 바꿉니다.- 시크릿 이름을 만든 시크릿의 이름으로 바꿉니다. 자세한 내용은 IAM 정책 설명에서 KMS 키 지정하기(Specifying KMS keys in IAM policy statements)를 참조하세요.
- KMS 키 ID를 Secrets Manager 시크릿을 암호화할 때 사용한 키 ID(기본 키 또는 자신의 키)로 바꿉니다.
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_1", "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_2" ] }, { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-2:111122223333:key/key_id", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com" } } } ] } -
역할을 만들고 해당 권한 정책을 연결합니다. 일반적인 단계는 AWS 서비스에 권한을 위임할 역할 생성하기(Create a role to delegate permissions to an AWS service)를 참조하세요.
- Trusted entity type(신뢰할 수 있는 엔터티 유형)에서 AWS service를 선택합니다.
- Use case(사용 사례)에서 RDS를 선택하고 사용 사례로 RDS - Add Role to Database를 선택합니다.
- Permissions policies(권한 정책)에서 만든 정책을 선택합니다.
- Select trusted entities(신뢰할 수 있는 엔터티 선택)에서 역할에 대해 다음 신뢰 정책을 입력합니다.
{ "Version":"2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
AWS CLI로 역할을 만들려면 다음 요청을 보내요.
aws iam create-role \
--role-name my_role_name \
--assume-role-policy-document '{"Version": "2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}'
그런 다음 정책을 역할에 연결해요.
aws iam put-role-policy \
--role-name my_role_name \
--policy-name secret_reader_policy \
--policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "secretsmanager:GetSecretValue",
"Resource": [
"arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_1",
"arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_2"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "arn:aws:kms:us-east-2:account_id:key/key_id",
"Condition": {
"StringEquals": {
"kms:ViaService": "secretsmanager.us-east-2.amazonaws.com"
}
}
}
]
}'
IAM 역할과 권한을 구성했다면 이제 프록시를 만들고 이 역할과 연결할 수 있어요. 이렇게 하면 프록시가 AWS Secrets Manager에서 데이터베이스 자격 증명을 안전하게 검색하고 애플리케이션에 IAM 인증을 활성화할 수 있어요. 자세한 내용은 Amazon RDS용 프록시 생성하기(Creating a proxy for Amazon RDS)를 참조하세요.