데이터베이스 접근 AWS IAM 참조
Teleport v18.9Teleport Database Service는 데이터베이스 유형 및 설정에 따라 데이터베이스 서버의 엔드포인트 및 메타데이터 발견, IAM 인증 토큰 생성, IAM 역할 수임 등 다양한 작업에 대한 IAM 권한이 필요합니다.
Teleport Database Service는 데이터베이스 유형 및 설정에 따라 데이터베이스 서버의 엔드포인트 및 메타데이터 발견, IAM 인증 토큰 생성, IAM 역할 수임 등 다양한 작업에 대한 IAM 권한이 필요합니다.
teleport db configure aws print-iam 명령을 사용하여 IAM 권한을 생성할 수 있습니다.
예를 들어, 다음 명령은 IAM 정책을 생성하여 출력합니다.
$ teleport db configure aws print-iam --types rds,redshift --role teleport-db-service-role
이 페이지는 Teleport로 다양한 데이터베이스를 보호하는 데 필요한 AWS IAM 권한을 나열합니다. 특정 데이터베이스 유형에 대한 IAM 권한에 대해 더 알아보려면 아래 관련 섹션을 참고하세요.
DocumentDB#
aws-account-id에 사용자의 AWS 계정 ID를 할당하십시오:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DocumentDBConnectAsIAMRole",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::aws-account-id:role/documentdb-user-role"
]
},
{
"Sid": "DocumentDBCheckDomainURL",
"Effect": "Allow",
"Action": "rds:DescribeDBClusters",
"Resource": "*"
}
]
}
| Statement | 용도 |
|---|---|
DocumentDBConnectAsIAMRole |
IAM 인증으로 DocumentDB 클러스터에 연결하기 위해 IAM 역할을 assume합니다. |
DocumentDBCheckDomainURL |
Discovery Service에 의해 자동 디스커버리된 경우 도메인의 URL을 검증합니다. |
DocumentDB 데이터베이스 사용자로서의 IAM 역할#
Teleport Database Service는 IAM 인증을 사용하여 DocumentDB 클러스터에 연결할 때 IAM 역할을 assume합니다.
DocumentDB IAM 인증에 대한 자세한 내용은 Authentication using IAM Identity를 참조하십시오.
IAM Role teleport-db-service-role이(가) IAM Role documentdb-user-role을(를) assume하도록 허용하려면
일반적으로 다음이 필요합니다:
1. documentdb-user-role에 신뢰 관계(Trust Relationship) 구성
teleport-db-service-role 또는 해당 AWS 계정이 documentdb-user-role의 신뢰 정책에서 Principal로
설정되어야 합니다.
Role as principal
aws-account-id에 사용자의 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws-account-id:role/teleport-db-service-role"
},
"Action": "sts:AssumeRole"
}
]
}
Account as principal
aws-account-id에 사용자의 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws-account-id:root"
},
"Action": "sts:AssumeRole"
}
]
}
Cross-account with external-id
external-aws-account-id에 외부 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::external-aws-account-id:role/teleport-db-service-role"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "example-external-id"
}
}
}
]
}
2. teleport-db-service-role에 권한 정책(Permissions Policy) 구성
teleport-db-service-role에는 sts:AssumeRole 권한이 필요합니다. 예를 들면 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": "arn:aws:iam::aws-account-id:role/documentdb-user-role"
}
]
}
teleport-db-service-role과(와) documentdb-user-role이(가) 동일한 AWS 계정에 있고 teleport-db-service-role의 전체 ARN이
documentdb-user-role의 신뢰 정책에 Principal로 구성되어 있는 경우에는 이 정책을 생략할 수 있습니다.
3. teleport-db-service-role에 권한 경계(Permissions Boundary) 구성
teleport-db-service-role에 연결된
권한 경계(Permissions boundary)가
없다면 이 단계를 건너뛸 수 있습니다.
그렇지 않은 경우, teleport-db-service-role에 연결된 경계 정책에는 sts:AssumeRole 권한이
포함되어야 합니다. 예를 들면 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": "*"
}
]
}
DynamoDB#
aws-account-id를 AWS 계정 ID로 지정합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DynamoDBConnectAsIAMRole",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::aws-account-id:role/dynamodb-user-role"
]
},
{
"Sid": "DynamoDBSessionTagging",
"Effect": "Allow",
"Action": "sts:TagSession",
"Resource": [
"*"
]
}
]
}
| Statement | 용도 |
|---|---|
DynamoDBConnectAsIAMRole |
DynamoDB로 요청을 전달하기 위해 IAM 역할을 assume합니다. |
DynamoDBSessionTagging |
Teleport 데이터베이스 구성의 aws.session_tags에 태그가 지정된 경우 assume한 역할 세션에 태그를 지정합니다. |
세션 태깅 권한은 Teleport 데이터베이스 구성의 aws.session_tags 섹션에 태그를 구성한
경우에만 필요합니다.
DynamoDB 데이터베이스 사용자로서의 IAM 역할#
Teleport Database Service는 사용자를 대신하여 DynamoDB로 요청을 전달할 때 사용자가 지정한 IAM 역할을 assume합니다. DynamoDB 관련 IAM 권한이 해당 IAM 역할에 연결되어야 합니다.
DynamoDB 권한에 대한 자세한 내용은 Actions, resources, and condition keys for Amazon DynamoDB를 참조하십시오.
IAM Role teleport-db-service-role이(가) IAM Role dynamodb-user-role을(를) assume하도록 허용하려면
일반적으로 다음이 필요합니다:
1. dynamodb-user-role에 신뢰 관계(Trust Relationship) 구성
teleport-db-service-role 또는 해당 AWS 계정이 dynamodb-user-role의 신뢰 정책에서 Principal로
설정되어야 합니다.
Role as principal
aws-account-id에 사용자의 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws-account-id:role/teleport-db-service-role"
},
"Action": "sts:AssumeRole"
}
]
}
Account as principal
aws-account-id에 사용자의 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws-account-id:root"
},
"Action": "sts:AssumeRole"
}
]
}
Cross-account with external-id
external-aws-account-id에 외부 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::external-aws-account-id:role/teleport-db-service-role"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "example-external-id"
}
}
}
]
}
2. teleport-db-service-role에 권한 정책(Permissions Policy) 구성
teleport-db-service-role에는 sts:AssumeRole 권한이 필요합니다. 예를 들면 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": "arn:aws:iam::aws-account-id:role/dynamodb-user-role"
}
]
}
teleport-db-service-role과(와) dynamodb-user-role이(가) 동일한 AWS 계정에 있고 teleport-db-service-role의 전체 ARN이
dynamodb-user-role의 신뢰 정책에 Principal로 구성되어 있는 경우에는 이 정책을 생략할 수 있습니다.
3. teleport-db-service-role에 권한 경계(Permissions Boundary) 구성
teleport-db-service-role에 연결된
권한 경계(Permissions boundary)가
없다면 이 단계를 건너뛸 수 있습니다.
그렇지 않은 경우, teleport-db-service-role에 연결된 경계 정책에는 sts:AssumeRole 권한이
포함되어야 합니다. 예를 들면 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": "*"
}
]
}
ElastiCache for Redis and Valkey#
ElastiCache는 Redis 및 Valkey 엔진 버전 7.0 이상에 대해 IAM 인증을 지원합니다. 이것이 ElastiCache에 대한 Teleport 접근을 구성하는 권장 방법입니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ElastiCacheFetchMetadata",
"Effect": "Allow",
"Action": "elasticache:DescribeReplicationGroups",
"Resource": "*"
},
{
"Sid": "ElastiCacheDescribeUsers",
"Effect": "Allow",
"Action": "elasticache:DescribeUsers",
"Resource": "*"
},
{
"Sid": "ElastiCacheConnect",
"Effect": "Allow",
"Action": "elasticache:Connect",
"Resource": "*"
}
]
}
| Statement | Purpose |
|---|---|
ElastiCacheFetchMetadata |
AWS 태그를 데이터베이스 레이블로 자동으로 가져오거나 데이터베이스의 AWS 리전과 같은 누락된 정보를 찾습니다. |
ElastiCacheDescribeUsers |
사용자가 IAM 인증과 호환되는지 확인합니다. |
ElastiCacheConnect |
IAM 인증을 사용하여 연결합니다. |
ElastiCacheConnect 문의 범위를 특정 ElastiCache 클러스터와 IAM 사용자만 허용하도록 업데이트하여 줄일 수 있습니다. 지정할 수 있는 리소스 ARN은 다음과 같은 형식을 가집니다.
arn:aws:elasticache:{Region}:{AccountID}:replicationgroup:{ReplicationGroup}
arn:aws:elasticache:{Region}:{AccountID}:user:{UserName}
자세한 내용은 Authenticating with IAM for ElastiCache를 참고하십시오.
ElastiCache 관리형 사용자#
ElastiCache에 대한 Teleport 접근을 구성하는 권장 방법은 IAM 인증을 사용하는 것이며, 이는 Redis 엔진 버전 7.0 이상에서 지원됩니다. AWS Secrets Manager에 저장된 비밀번호로 관리형 사용자를 사용하는 것은 ElastiCache에 대한 Teleport 접근을 구성하는 레거시 방식입니다.
ElastiCache 사용자가 Teleport에 의해 관리되도록 태그가 지정된 경우, ElastiCache 사용자를 관리하는 데 필요한 IAM 권한은 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ElastiCacheManageUsers",
"Effect": "Allow",
"Action": [
"elasticache:DescribeUsers",
"elasticache:ModifyUser",
"elasticache:ListTagsForResource"
],
"Resource": "*"
},
{
"Sid": "ElastiCacheManagePasswords",
"Effect": "Allow",
"Action": [
"secretsmanager:CreateSecret",
"secretsmanager:DeleteSecret",
"secretsmanager:DescribeSecret",
"secretsmanager:GetSecretValue",
"secretsmanager:PutSecretValue",
"secretsmanager:TagResource",
"secretsmanager:UpdateSecret"
],
"Resource": [
"arn:aws:secretsmanager:*:aws-account-id:secret:teleport/*"
]
}
]
}
Teleport가 사용하는 기본 Secrets Manager 키 접두사는 "teleport/"입니다.
Teleport 데이터베이스 구성에서 사용자 지정 키 접두사를 구성한 경우,
IAM 정책 리소스 이름 teleport을 해당 사용자 지정 접두사와
일치하도록 업데이트해야 합니다.
Teleport 데이터베이스 구성에서 사용자 지정 KMS 키 ID를 구성한 경우, IAM 정책에
다음을 추가하고 your-kms-id을 사용자의 KMS ID로 지정하십시오:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"arn:aws:kms:*:aws-account-id:key/your-kms-id"
]
}
]
}
ElastiCache Serverless for Redis and Valkey#
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ElastiCacheServerlessFetchMetadata",
"Effect": "Allow",
"Action": "elasticache:DescribeServerlessCaches",
"Resource": "*"
},
{
"Sid": "ElastiCacheServerlessDescribeUsers",
"Effect": "Allow",
"Action": "elasticache:DescribeUsers",
"Resource": "*"
},
{
"Sid": "ElastiCacheServerlessConnect",
"Effect": "Allow",
"Action": "elasticache:Connect",
"Resource": "*"
}
]
}
| Statement | 용도 |
|---|---|
ElastiCacheServerlessFetchMetadata |
데이터베이스에 대한 AWS 메타데이터를 자동으로 가져옵니다. |
ElastiCacheServerlessDescribeUsers |
사용자가 IAM 인증과 호환되는지 판별합니다. |
ElastiCacheServerlessConnect |
IAM 인증을 사용하여 연결합니다. |
Keyspaces#
aws-account-id를 AWS 계정 ID로 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "KeyspacesConnectAsIAMRole",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::aws-account-id:role/keyspaces-user-role"
]
}
]
}
| Statement | 목적 |
|---|---|
KeyspacesConnectAsIAMRole |
Keyspaces로 요청을 전달하기 위해 IAM 역할을 assume합니다. |
Keyspaces 데이터베이스 사용자로서의 IAM 역할#
Teleport Database Service는 사용자를 대신하여 Keyspaces로 요청을 전달할 때 사용자가 지정한 IAM 역할을 assume합니다. Keyspaces 관련 IAM 권한은 해당 IAM 역할에 연결되어야 합니다.
IAM 역할에 부여할 수 있는 Keyspaces 권한에 대한 자세한 내용은 Amazon Keyspaces identity-based policy examples를 참고하십시오.
IAM Role teleport-db-service-role이(가) IAM Role keyspaces-user-role을(를) assume하도록 허용하려면
일반적으로 다음이 필요합니다:
1. keyspaces-user-role에 신뢰 관계(Trust Relationship) 구성
teleport-db-service-role 또는 해당 AWS 계정이 keyspaces-user-role의 신뢰 정책에서 Principal로
설정되어야 합니다.
Role as principal
aws-account-id에 사용자의 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws-account-id:role/teleport-db-service-role"
},
"Action": "sts:AssumeRole"
}
]
}
Account as principal
aws-account-id에 사용자의 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws-account-id:root"
},
"Action": "sts:AssumeRole"
}
]
}
Cross-account with external-id
external-aws-account-id에 외부 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::external-aws-account-id:role/teleport-db-service-role"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "example-external-id"
}
}
}
]
}
2. teleport-db-service-role에 권한 정책(Permissions Policy) 구성
teleport-db-service-role에는 sts:AssumeRole 권한이 필요합니다. 예를 들면 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": "arn:aws:iam::aws-account-id:role/keyspaces-user-role"
}
]
}
teleport-db-service-role과(와) keyspaces-user-role이(가) 동일한 AWS 계정에 있고 teleport-db-service-role의 전체 ARN이
keyspaces-user-role의 신뢰 정책에 Principal로 구성되어 있는 경우에는 이 정책을 생략할 수 있습니다.
3. teleport-db-service-role에 권한 경계(Permissions Boundary) 구성
teleport-db-service-role에 연결된
권한 경계(Permissions boundary)가
없다면 이 단계를 건너뛸 수 있습니다.
그렇지 않은 경우, teleport-db-service-role에 연결된 경계 정책에는 sts:AssumeRole 권한이
포함되어야 합니다. 예를 들면 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": "*"
}
]
}
MemoryDB#
MemoryDB는 Redis 엔진 버전 7.0 이상에 대해 IAM 인증을 지원합니다. 이것이 MemoryDB에 대한 Teleport 접근을 구성하는 권장 방법입니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MemoryDBFetchMetadata",
"Effect": "Allow",
"Action": "memorydb:DescribeClusters",
"Resource": "*"
},
{
"Sid": "MemoryDBDescribeUsers",
"Effect": "Allow",
"Action": "memorydb:DescribeUsers",
"Resource": "*"
},
{
"Sid": "MemoryDBConnect",
"Effect": "Allow",
"Action": "memorydb:Connect",
"Resource": "*"
}
]
}
| Statement | Purpose |
|---|---|
MemoryDBFetchMetadata |
AWS 태그를 데이터베이스 레이블로 자동으로 가져오거나 데이터베이스의 AWS 리전과 같은 누락된 정보를 찾습니다. |
MemoryDBDescribeUsers |
사용자가 IAM 인증과 호환되는지 확인합니다. |
MemoryDBConnect |
IAM 인증을 사용하여 연결합니다. |
MemoryDBConnect 문의 범위를 특정 MemoryDB 클러스터와 IAM 사용자만 허용하도록 업데이트하여 줄일 수 있습니다. 지정할 수 있는 리소스 ARN은 다음과 같은 형식을 가집니다.
arn:aws:memorydb:{Region}:{AccountID}:cluster:{ClusterName}
arn:aws:memorydb:{Region}:{AccountID}:user:{UserName}
자세한 내용은 Authenticating with IAM for MemoryDB를 참고하십시오.
MemoryDB 관리형 사용자#
MemoryDB에 대한 Teleport 접근을 구성하는 권장 방법은 IAM 인증을 사용하는 것이며, 이는 Redis 엔진 버전 7.0 이상에서 지원됩니다. AWS Secrets Manager에 저장된 비밀번호로 관리형 사용자를 사용하는 것은 MemoryDB에 대한 Teleport 접근을 구성하는 레거시 방식입니다.
MemoryDB 사용자가 Teleport에 의해 관리되도록 태그가 지정된 경우, MemoryDB 사용자를 관리하는 데 필요한 IAM 권한은 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MemoryDBManageUsers",
"Effect": "Allow",
"Action": [
"memorydb:DescribeUsers",
"memorydb:UpdateUser",
"memorydb:ListTags"
],
"Resource": "*"
},
{
"Sid": "MemoryDBManagePasswords",
"Effect": "Allow",
"Action": [
"secretsmanager:CreateSecret",
"secretsmanager:DeleteSecret",
"secretsmanager:DescribeSecret",
"secretsmanager:GetSecretValue",
"secretsmanager:PutSecretValue",
"secretsmanager:TagResource",
"secretsmanager:UpdateSecret"
],
"Resource": [
"arn:aws:secretsmanager:*:aws-account-id:secret:teleport/*"
]
}
]
}
Teleport가 사용하는 기본 Secrets Manager 키 접두사는 "teleport/"입니다.
Teleport 데이터베이스 구성에서 사용자 지정 키 접두사를 구성한 경우,
IAM 정책 리소스 이름 teleport을 해당 사용자 지정 접두사와
일치하도록 업데이트해야 합니다.
Teleport 데이터베이스 구성에서 사용자 지정 KMS 키 ID를 구성한 경우, IAM 정책에
다음을 추가하고 your-kms-id을 사용자의 KMS ID로 지정하십시오:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"arn:aws:kms:*:aws-account-id:key/your-kms-id"
]
}
]
}
OpenSearch#
aws-account-id에 사용자의 AWS 계정 ID를 할당하십시오:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OpenSearchCheckDomainURL",
"Effect": "Allow",
"Action": "es:DescribeDomains",
"Resource": [
"*"
]
},
{
"Sid": "OpenSearchConnectAsIAMRole",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::aws-account-id:role/opensearch-user-role"
]
}
]
}
| Statement | 용도 |
|---|---|
OpenSearchCheckDomainURL |
Discovery Service에 의해 자동 디스커버리된 경우 도메인의 URL을 검증합니다. |
OpenSearchConnectAsIAMRole |
OpenSearch로 요청을 전달하기 위해 IAM 역할을 assume합니다. |
OpenSearch 데이터베이스 사용자로서의 IAM 역할#
OpenSearch는 IAM 역할을 OpenSearch 백엔드 역할에 매핑합니다. Teleport Database Service는 OpenSearch API 요청에 서명하기 위해 이러한 "access" IAM 역할을 assume할 수 있어야 합니다.
이러한 역할에 구성할 수 있는 권한에 대한 자세한 내용은 Fine-grained access control in Amazon OpenSearch Service를 참고하십시오.
IAM Role teleport-db-service-role이(가) IAM Role opensearch-user-role을(를) assume하도록 허용하려면
일반적으로 다음이 필요합니다:
1. opensearch-user-role에 신뢰 관계(Trust Relationship) 구성
teleport-db-service-role 또는 해당 AWS 계정이 opensearch-user-role의 신뢰 정책에서 Principal로
설정되어야 합니다.
Role as principal
aws-account-id에 사용자의 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws-account-id:role/teleport-db-service-role"
},
"Action": "sts:AssumeRole"
}
]
}
Account as principal
aws-account-id에 사용자의 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws-account-id:root"
},
"Action": "sts:AssumeRole"
}
]
}
Cross-account with external-id
external-aws-account-id에 외부 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::external-aws-account-id:role/teleport-db-service-role"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "example-external-id"
}
}
}
]
}
2. teleport-db-service-role에 권한 정책(Permissions Policy) 구성
teleport-db-service-role에는 sts:AssumeRole 권한이 필요합니다. 예를 들면 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": "arn:aws:iam::aws-account-id:role/opensearch-user-role"
}
]
}
teleport-db-service-role과(와) opensearch-user-role이(가) 동일한 AWS 계정에 있고 teleport-db-service-role의 전체 ARN이
opensearch-user-role의 신뢰 정책에 Principal로 구성되어 있는 경우에는 이 정책을 생략할 수 있습니다.
3. teleport-db-service-role에 권한 경계(Permissions Boundary) 구성
teleport-db-service-role에 연결된
권한 경계(Permissions boundary)가
없다면 이 단계를 건너뛸 수 있습니다.
그렇지 않은 경우, teleport-db-service-role에 연결된 경계 정책에는 sts:AssumeRole 권한이
포함되어야 합니다. 예를 들면 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": "*"
}
]
}
RDS#
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RDSAutoEnableIAMAuth",
"Effect": "Allow",
"Action": [
"rds:ModifyDBCluster",
"rds:ModifyDBInstance"
],
"Resource": "*"
},
{
"Sid": "RDSConnect",
"Effect": "Allow",
"Action": "rds-db:connect",
"Resource": "*"
},
{
"Sid": "RDSFetchMetadata",
"Effect": "Allow",
"Action": [
"rds:DescribeDBClusters",
"rds:DescribeDBInstances"
],
"Resource": "*"
}
]
}
| Statement | Purpose |
|---|---|
RDSAutoEnableIAMAuth |
RDS 인스턴스와 Aurora 클러스터에서 IAM 인증을 자동으로 활성화합니다. |
RDSConnect |
데이터베이스에 연결하기 위한 IAM 인증 토큰을 생성합니다. |
RDSFetchMetadata |
AWS 태그를 데이터베이스 레이블로 자동으로 가져오거나 데이터베이스의 AWS 리전과 같은 누락된 정보를 찾습니다. |
Teleport Database Service는 rds:ModifyDBInstance와
rds:ModifyDBCluster를 사용하여 각각 RDS 인스턴스와 Aurora 클러스터에서
IAM 인증을
자동으로 활성화합니다.
데이터베이스에서 IAM 인증이 이미 활성화되어 있다면 RDSAutoEnableIAMAuth 권한을
생략할 수 있습니다.
데이터베이스에 연결하려면 rds-db:connect 권한이 필요합니다.
특정 데이터베이스, 리전 또는 사용자만 허용하도록 권한의 범위를
좁힐 수 있습니다.
리소스 ARN은 다음과 같은 형식을 가집니다:
arn:aws:rds-db:{Region}:{AccountID}:dbuser:{ResourceID}/{UserName}
rds-db:connect 권한 부여 구문에 대한 자세한 내용은
Creating and using an IAM policy for IAM database access
를 참조하십시오.
Teleport Discovery Service에 의해 검색된 데이터베이스는 완전한 메타데이터와 함께
등록되어야 하므로, 모든 AWS 데이터베이스가 자동 검색되고 있다면 RDSFetchMetadata
권한을 생략할 수도 있습니다.
RDS Proxy#
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RDSProxyConnect",
"Effect": "Allow",
"Action": "rds-db:connect",
"Resource": "*"
},
{
"Sid": "RDSProxyFetchMetadata",
"Effect": "Allow",
"Action": [
"rds:DescribeDBProxies",
"rds:DescribeDBProxyEndpoints"
],
"Resource": "*"
}
]
}
| Statement | 목적 |
|---|---|
RDSProxyConnect |
데이터베이스에 연결하기 위한 IAM 인증 토큰을 생성합니다. |
RDSProxyFetchMetadata |
AWS 태그를 데이터베이스 레이블로 자동으로 가져오거나 데이터베이스의 AWS 리전과 같은 누락된 정보를 찾습니다. |
데이터베이스에 연결하려면 rds-db:connect 권한이 필요합니다.
특정 데이터베이스, 리전 또는 사용자만 허용하도록 권한의 범위를
좁힐 수 있습니다.
리소스 ARN은 다음과 같은 형식을 가집니다:
arn:aws:rds-db:{Region}:{AccountID}:dbuser:{ResourceID}/{UserName}
rds-db:connect 권한 부여 구문에 대한 자세한 내용은
Creating and using an IAM policy for IAM database access
를 참조하십시오.
Teleport Discovery Service에 의해 검색된 데이터베이스는 완전한 메타데이터와 함께
등록되어야 하므로, 모든 AWS 데이터베이스가 자동 검색되고 있다면 RDSProxyFetchMetadata
권한을 생략할 수도 있습니다.
Redshift#
aws-account-id에 AWS 계정 ID를 할당합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RedshiftConnectAsDBUser",
"Effect": "Allow",
"Action": "redshift:GetClusterCredentials",
"Resource": "*"
},
{
"Sid": "RedshiftConnectAsIAMRole",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::aws-account-id:role/redshift-user-role"
]
},
{
"Sid": "RedshiftFetchMetadata",
"Effect": "Allow",
"Action": "redshift:DescribeClusters",
"Resource": "*"
}
]
}
| Statement | 용도 |
|---|---|
RedshiftConnectAsDBUser |
기존 데이터베이스 사용자로 데이터베이스에 연결합니다. |
RedshiftConnectAsIAMRole |
IAM 역할을 가장하여 해당 역할의 IAM 권한을 데이터베이스에 1:1로 매핑한 권한으로 데이터베이스에 연결합니다. |
RedshiftFetchMetadata |
AWS 태그를 데이터베이스 레이블로 자동 가져오거나 데이터베이스의 AWS 리전과 같은 누락된 정보를 찾습니다. |
RedshiftConnectAsDBUser statement를 특정 사용자, 데이터베이스, 데이터베이스
그룹만 허용하도록 업데이트하여 그 범위를 줄일 수 있습니다.
지정할 수 있는 리소스 ARN은 다음 형식을 가집니다:
arn:aws:redshift:{Region}:{AccountID}:dbuser:{ClusterName}/{UserName}
arn:aws:redshift:{Region}:{AccountID}:dbname:{ClusterName}/{DatabaseName}
arn:aws:redshift:{Region}:{AccountID}:dbgroup:{ClusterName}/{DatabaseGroupName}
redshift:GetClusterCredentials 권한 부여 구문에 대한 자세한 내용은
GetClusterCredentials를 호출할 수 있는 권한을 가진 IAM 역할 또는 사용자 생성을
참조하십시오.
기존 데이터베이스 사용자로 인증하거나 데이터베이스에 자동으로 매핑되는 IAM 역할로
인증할 수 있습니다.
해당 IAM statement는 사용하려는 방식에 대해서만 필요합니다.
IAM 역할이 Database Service의 identity를 신뢰할 수 있는 principal로 지정하고 두
identity가 동일한 AWS 계정에 있다면, RedshiftConnectAsIAMRole statement도 생략할
수 있습니다.
Teleport Discovery Service에 의해 검색된 데이터베이스는 완전한 메타데이터와 함께
등록되어야 하므로, 모든 AWS 데이터베이스가 자동 검색되고 있다면 RedshiftFetchMetadata
권한을 생략할 수도 있습니다.
Redshift 데이터베이스 사용자로서의 IAM 역할#
다음 권한 정책은 Teleport 사용자가 데이터베이스 사용자로 지정할 수 있는 IAM 역할에 연결해야 합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RedshiftConnectWithIAM",
"Effect": "Allow",
"Action": "redshift:GetClusterCredentialsWithIAM",
"Resource": "*"
}
]
}
| Statement | Purpose |
|---|---|
RedshiftConnectWithIAM |
이 IAM 자격 증명에서 1:1로 매핑된 데이터베이스 사용자로 Redshift 데이터베이스에 연결합니다. |
IAM 역할은 자격 증명의 IAM 권한에서 1:1로 매핑된 권한을 가진 자동 생성 데이터베이스 사용자로 연결할 수 있습니다.
데이터베이스의 권한은 IAM 자격 증명에 연결된 redshift-data:* 문(예: redshift-data:GetStatementResult)으로 부여됩니다.
Teleport 사용자는 데이터베이스 사용자로 "role/{RoleName}"을 지정하여 해당 역할로 연결할 수 있습니다. 예를 들면 다음과 같습니다.
$ tsh db connect my-redshift --db-user=role/redshift-user-role
데이터베이스 사용자에게 매핑되는 사용 가능한 Redshift IAM 권한에 대한 자세한 내용은 Using identity-based policies for Amazon Redshift를 참고하십시오.
IAM Role teleport-db-service-role이(가) IAM Role redshift-user-role을(를) assume하도록 허용하려면
일반적으로 다음이 필요합니다:
1. redshift-user-role에 신뢰 관계(Trust Relationship) 구성
teleport-db-service-role 또는 해당 AWS 계정이 redshift-user-role의 신뢰 정책에서 Principal로
설정되어야 합니다.
Role as principal
aws-account-id에 사용자의 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws-account-id:role/teleport-db-service-role"
},
"Action": "sts:AssumeRole"
}
]
}
Account as principal
aws-account-id에 사용자의 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws-account-id:root"
},
"Action": "sts:AssumeRole"
}
]
}
Cross-account with external-id
external-aws-account-id에 외부 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::external-aws-account-id:role/teleport-db-service-role"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "example-external-id"
}
}
}
]
}
2. teleport-db-service-role에 권한 정책(Permissions Policy) 구성
teleport-db-service-role에는 sts:AssumeRole 권한이 필요합니다. 예를 들면 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": "arn:aws:iam::aws-account-id:role/redshift-user-role"
}
]
}
teleport-db-service-role과(와) redshift-user-role이(가) 동일한 AWS 계정에 있고 teleport-db-service-role의 전체 ARN이
redshift-user-role의 신뢰 정책에 Principal로 구성되어 있는 경우에는 이 정책을 생략할 수 있습니다.
3. teleport-db-service-role에 권한 경계(Permissions Boundary) 구성
teleport-db-service-role에 연결된
권한 경계(Permissions boundary)가
없다면 이 단계를 건너뛸 수 있습니다.
그렇지 않은 경우, teleport-db-service-role에 연결된 경계 정책에는 sts:AssumeRole 권한이
포함되어야 합니다. 예를 들면 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": "*"
}
]
}
Redshift Serverless#
aws-account-id에 여러분의 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RedshiftServerlessConnectAsIAMRole",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::aws-account-id:role/redshift-serverless-user-role"
]
},
{
"Sid": "RedshiftServerlessFetchMetadata",
"Effect": "Allow",
"Action": [
"redshift-serverless:GetEndpointAccess",
"redshift-serverless:GetWorkgroup"
],
"Resource": "*"
}
]
}
| Statement | 목적 |
|---|---|
RedshiftServerlessFetchMetadata |
AWS 태그를 데이터베이스 레이블로 자동 가져오거나 데이터베이스의 AWS 리전과 같은 누락된 정보를 찾습니다. |
RedshiftServerlessConnectAsIAMRole |
IAM 역할을 assume하여 데이터베이스 사용자로 연결합니다. |
Teleport Discovery Service에 의해 검색된 데이터베이스는 완전한 메타데이터와 함께
등록되어야 하므로, 모든 AWS 데이터베이스가 자동 검색되고 있다면 RedshiftServerlessFetchMetadata
권한을 생략할 수도 있습니다.
Redshift Serverless는 IAM 역할을 데이터베이스 사용자에 매핑합니다. Teleport Database Service는 IAM 인증 토큰을 생성할 수 있는 IAM 권한이 부여된 이러한 "access" IAM 역할을 assume할 수 있어야 합니다.
Redshift Serverless 데이터베이스 사용자로서의 IAM 역할#
다음 권한 정책은 Teleport 사용자가 데이터베이스 사용자로 지정할 수 있는 IAM
역할에 연결되어야 합니다. us-east-2에는 AWS 리전을,
aws-account-id에는 AWS 계정 ID를,
workgroup-id에는 워크그룹 ID를 할당합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RedshiftServerlessConnect",
"Effect": "Allow",
"Action": "redshift-serverless:GetCredentials",
"Resource": "arn:aws:redshift-serverless:us-east-2:aws-account-id:workgroup/workgroup-id"
}
]
}
| Statement | Purpose |
|---|---|
RedshiftServerlessConnect |
데이터베이스에 연결하기 위한 자격 증명을 가져옵니다. |
리소스 ARN 문자열은 다음 형식을 갖습니다:
arn:aws:redshift-serverless:{Region}:{AccountID}:workgroup/{WorkgroupID}
Teleport 사용자는 역할 이름을 데이터베이스 사용자로 지정하여 해당 IAM 역할로 연결할 수 있습니다. 예:
$ tsh db connect redshift-serverless-example-db --db-user=redshift-serverless-user-role
Redshift Serverless 권한 구성에 대한 자세한 내용은 Identity and access management in Amazon Redshift Serverless를 참조하십시오.
IAM Role teleport-db-service-role이(가) IAM Role redshift-serverless-user-role을(를) assume하도록 허용하려면
일반적으로 다음이 필요합니다:
1. redshift-serverless-user-role에 신뢰 관계(Trust Relationship) 구성
teleport-db-service-role 또는 해당 AWS 계정이 redshift-serverless-user-role의 신뢰 정책에서 Principal로
설정되어야 합니다.
Role as principal
aws-account-id에 사용자의 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws-account-id:role/teleport-db-service-role"
},
"Action": "sts:AssumeRole"
}
]
}
Account as principal
aws-account-id에 사용자의 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws-account-id:root"
},
"Action": "sts:AssumeRole"
}
]
}
Cross-account with external-id
external-aws-account-id에 외부 AWS 계정 ID를 지정합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::external-aws-account-id:role/teleport-db-service-role"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "example-external-id"
}
}
}
]
}
2. teleport-db-service-role에 권한 정책(Permissions Policy) 구성
teleport-db-service-role에는 sts:AssumeRole 권한이 필요합니다. 예를 들면 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": "arn:aws:iam::aws-account-id:role/redshift-serverless-user-role"
}
]
}
teleport-db-service-role과(와) redshift-serverless-user-role이(가) 동일한 AWS 계정에 있고 teleport-db-service-role의 전체 ARN이
redshift-serverless-user-role의 신뢰 정책에 Principal로 구성되어 있는 경우에는 이 정책을 생략할 수 있습니다.
3. teleport-db-service-role에 권한 경계(Permissions Boundary) 구성
teleport-db-service-role에 연결된
권한 경계(Permissions boundary)가
없다면 이 단계를 건너뛸 수 있습니다.
그렇지 않은 경우, teleport-db-service-role에 연결된 경계 정책에는 sts:AssumeRole 권한이
포함되어야 합니다. 예를 들면 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": "*"
}
]
}