Infograb logo
데이터베이스 접근 AWS IAM 참조

Teleport 데이터베이스 서비스는 데이터베이스 유형 및 설정에 따라 다양한 작업을 수행하기 위한 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

특정 유형의 데이터베이스에 대한 IAM 권한에 대해 더 알아보려면 아래 관련 섹션을 참조하십시오.

DocumentDB

{
    "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": "*"
        }
    ]
}
StatementPurpose
DocumentDBConnectAsIAMRoleIAM 인증으로 DocumentDB 클러스터에 연결하기 위해 IAM 역할을 가져옵니다.
DocumentDBCheckDomainURLDiscovery Service에 의해 자동 검색된 경우 도메인의 URL을 검증합니다.

DocumentDB 데이터베이스 사용자로서의 IAM 역할

Teleport Database Service는 IAM 인증을 사용하여 DocumentDB 클러스터에 연결할 때 IAM 역할을 가정합니다.

DocumentDB IAM 인증에 대한 자세한 내용은 Authentication using IAM Identity 를 참조하십시오.

IAM 역할 teleport-db-service-role 이 IAM 역할 documentdb-user-role 를 가정할 수 있도록 허용하려면, 일반적으로 다음이 필요합니다:

1. documentdb-user-role의 신뢰 관계 구성

teleport-db-service-role 또는 해당 AWS 계정은 documentdb-user-role의 신뢰 정책에서 Principal 로 설정되어야 합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id:role/teleport-db-service-role"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
{
  "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의 권한 정책 구성

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-roledocumentdb-user-role가 같은 AWS 계정에 있고 teleport-db-service-role의 전체 ARN이 documentdb-user-role의 신뢰 정책에 Principal로 구성되어 있을 때 생략할 수 있습니다.

3. teleport-db-service-role의 권한 경계 구성

teleport-db-service-role에 부착된 권한 경계 가 없는 경우 이 단계를 건너뛸 수 있습니다. 그렇지 않으면 teleport-db-service-role에 부착된 경계 정책은 sts:AssumeRole 권한을 포함해야 합니다. 예를 들면:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

DynamoDB

{
    "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": [
                "*"
            ]
        }
    ]
}
StatementPurpose
DynamoDBConnectAsIAMRoleDynamoDB에 요청을 전달하기 위해 IAM 역할을 가정합니다.
DynamoDBSessionTaggingTeleport 데이터베이스 구성의 aws.session_tags 아래에 태그가 지정된 경우 가정된 역할 세션에 태그를 추가합니다.

세션 태깅 권한은 Teleport 데이터베이스 구성의 aws.session_tags 섹션에서 태그를 구성한 경우에만 필요합니다.

DynamoDB 데이터베이스 사용자로서의 IAM 역할

Teleport 데이터베이스 서비스는 사용자가 지정한 IAM 역할을 가정하고 대신 DynamoDB에 요청을 전달합니다.
DynamoDB 관련 IAM 권한은 해당 IAM 역할에 연결되어 있어야 합니다.

자세한 내용은
Amazon DynamoDB의 작업, 리소스 및 조건 키
를 참조하십시오.

IAM 역할 teleport-db-service-role 이 IAM 역할 dynamodb-user-role 를 가정할 수 있도록 허용하려면, 일반적으로 다음이 필요합니다:

1. dynamodb-user-role의 신뢰 관계 구성

teleport-db-service-role 또는 해당 AWS 계정은 dynamodb-user-role의 신뢰 정책에서 Principal 로 설정되어야 합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id:role/teleport-db-service-role"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
{
  "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의 권한 정책 구성

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-roledynamodb-user-role가 같은 AWS 계정에 있고 teleport-db-service-role의 전체 ARN이 dynamodb-user-role의 신뢰 정책에 Principal로 구성되어 있을 때 생략할 수 있습니다.

3. teleport-db-service-role의 권한 경계 구성

teleport-db-service-role에 부착된 권한 경계 가 없는 경우 이 단계를 건너뛸 수 있습니다. 그렇지 않으면 teleport-db-service-role에 부착된 경계 정책은 sts:AssumeRole 권한을 포함해야 합니다. 예를 들면:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

ElastiCache for Redis

{/* this comment is here to make the include below it render */}

(!docs/pages/includes/database-access/reference/aws-iam/redis/access-policy.mdx dbType="ElastiCache" permissionType="elasticache"!)

다음 링크를 참조하십시오.  
[ElastiCache에 대한 IAM 인증](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/auth-iam.html)  
자세한 내용은 여기를 클릭하십시오.

ElastiCache 관리 사용자

ElastiCache에 대한 Teleport 접근을 구성하는 권장 방법은 Redis 엔진 버전 7.0 이상에서 지원되는 IAM auth를 사용하는 것입니다. 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 정책에 다음을 추가하십시오:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": [
                "arn:aws:kms:*:aws-account-id\:key/your-kms-id\"
            ]
        }
    ]
}

Keyspaces

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "KeyspacesConnectAsIAMRole",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": [
                "arn:aws:iam::aws-account-id:role/keyspaces-user-role"
            ]
        }
    ]
}
StatementPurpose
KeyspacesConnectAsIAMRoleIAM 역할을 가정하여 Keyspaces로 요청을 전달합니다.

Keyspaces 데이터베이스 사용자로서의 IAM 역할

Teleport 데이터베이스 서비스는 사용자가 지정한 IAM 역할을 가정하고 Keyspaces에 요청을 전달합니다.
Keyspaces 관련 IAM 권한은 해당 IAM 역할에 첨부되어야 합니다.

자세한 내용은
Amazon Keyspaces 아이덴티티 기반 정책 예제
를 참조하여 IAM 역할에 부여할 수 있는 Keyspaces 권한에 대해 알아보십시오.

IAM 역할 teleport-db-service-role 이 IAM 역할 keyspaces-user-role 를 가정할 수 있도록 허용하려면, 일반적으로 다음이 필요합니다:

1. keyspaces-user-role의 신뢰 관계 구성

teleport-db-service-role 또는 해당 AWS 계정은 keyspaces-user-role의 신뢰 정책에서 Principal 로 설정되어야 합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id:role/teleport-db-service-role"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
{
  "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의 권한 정책 구성

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-rolekeyspaces-user-role가 같은 AWS 계정에 있고 teleport-db-service-role의 전체 ARN이 keyspaces-user-role의 신뢰 정책에 Principal로 구성되어 있을 때 생략할 수 있습니다.

3. teleport-db-service-role의 권한 경계 구성

teleport-db-service-role에 부착된 권한 경계 가 없는 경우 이 단계를 건너뛸 수 있습니다. 그렇지 않으면 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": "MemoryDBDescribeUsers",
            "Effect": "Allow",
            "Action": "memorydb:DescribeUsers",
            "Resource": "*"
        },
        {
            "Sid": "MemoryDBConnect",
            "Effect": "Allow",
            "Action": "memorydb:Connect",
            "Resource": [
                "arn:aws:memorydb:us-east-2:aws-account-id:replicationgroup:replication-group",
                "arn:aws:memorydb:us-east-2:aws-account-id:user:*"
            ]
        }
    ]
}
StatementPurpose
MemoryDBDescribeUsers사용자가 IAM 인증과 호환되는지 확인합니다.
MemoryDBConnectIAM 인증을 사용하여 연결합니다.

자세한 내용은
MemoryDB에 대한 IAM 인증 를 참조하십시오.

MemoryDB 관리 사용자

MemoryDB에 대한 Teleport 접근을 구성하는 권장 방법은 Redis 엔진 버전 7.0 이상에서 지원되는 IAM auth를 사용하는 것입니다. 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 정책에 다음을 추가하십시오:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": [
                "arn:aws:kms:*:aws-account-id\:key/your-kms-id\"
            ]
        }
    ]
}

OpenSearch

{
    "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"
            ]
        }
    ]
}
StatementPurpose
OpenSearchCheckDomainURL발견 서비스에 의해 자동 발견된 도메인의 URL을 검증합니다.
OpenSearchConnectAsIAMRoleOpenSearch로 요청을 전달하기 위해 IAM 역할을 가정합니다.

OpenSearch 데이터베이스 사용자로서의 IAM 역할

OpenSearch는 IAM 역할을 OpenSearch 백엔드 역할에 매핑합니다.
Teleport Database Service는 OpenSearch API 요청을 서명하기 위해 이러한 "액세스" IAM 역할을 가질 수 있어야 합니다.

자세한 정보는
Amazon OpenSearch Service의 세분화된 액세스 제어
에서 이러한 역할을 위해 구성할 수 있는 권한에 대해 참고하십시오.

IAM 역할 teleport-db-service-role 이 IAM 역할 opensearch-user-role 를 가정할 수 있도록 허용하려면, 일반적으로 다음이 필요합니다:

1. opensearch-user-role의 신뢰 관계 구성

teleport-db-service-role 또는 해당 AWS 계정은 opensearch-user-role의 신뢰 정책에서 Principal 로 설정되어야 합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id:role/teleport-db-service-role"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
{
  "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의 권한 정책 구성

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-roleopensearch-user-role가 같은 AWS 계정에 있고 teleport-db-service-role의 전체 ARN이 opensearch-user-role의 신뢰 정책에 Principal로 구성되어 있을 때 생략할 수 있습니다.

3. teleport-db-service-role의 권한 경계 구성

teleport-db-service-role에 부착된 권한 경계 가 없는 경우 이 단계를 건너뛸 수 있습니다. 그렇지 않으면 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": "*"
        }
    ]
}
StatementPurpose
RDSAutoEnableIAMAuthRDS 인스턴스와 Aurora 클러스터에서 IAM 인증을 자동으로 활성화합니다.
RDSConnect데이터베이스에 연결하기 위한 IAM 인증 토큰을 생성합니다.
RDSFetchMetadataAWS 태그를 데이터베이스 레이블로 자동으로 가져오거나 데이터베이스의 AWS 리전과 같은 누락된 정보를 찾습니다.

Teleport 데이터베이스 서비스는 rds:ModifyDBInstancerds:ModifyDBCluster 를 사용하여 RDS 인스턴스와 Aurora 클러스터에서 각각 IAM 인증을 자동으로 활성화합니다. 데이터베이스에서 IAM 인증이 이미 활성화된 경우 RDSAutoEnableIAMAuth 권한을 생략할 수 있습니다.

rds-db:connect 권한은 데이터베이스에 연결하는 데 필요합니다.
권한의 범위를 특정 데이터베이스, 리전 또는 사용자만 허용하도록 줄일 수 있습니다.
리소스 ARN은 다음 형식을 가집니다:

arn:aws:rds-db:{Region}:{AccountID}:dbuser:{ResourceID}/{UserName}

rds-db:connect 권한 부여 구문에 대한 자세한 내용은
IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용 을 참조하십시오.

텔레포트 검색 서비스에 의해 발견된 데이터베이스는 완전한 메타데이터로 등록해야 하므로, 모든 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": "*"
        }
    ]
}
StatementPurpose
RDSProxyConnect데이터베이스에 연결하기 위해 IAM 인증 Token을 생성합니다.
RDSProxyFetchMetadataAWS 태그를 데이터베이스 레이블로 자동으로 가져오거나 데이터베이스의 AWS 지역과 같은 누락된 정보를 찾습니다.

rds-db:connect 권한은 데이터베이스에 연결하는 데 필요합니다.
권한의 범위를 특정 데이터베이스, 리전 또는 사용자만 허용하도록 줄일 수 있습니다.
리소스 ARN은 다음 형식을 가집니다:

arn:aws:rds-db:{Region}:{AccountID}:dbuser:{ResourceID}/{UserName}

rds-db:connect 권한 부여 구문에 대한 자세한 내용은
IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용 을 참조하십시오.

텔레포트 검색 서비스에 의해 발견된 데이터베이스는 완전한 메타데이터로 등록해야 하므로, 모든 AWS 데이터베이스가 자동 검색되는 경우 RDSProxyFetchMetadata 권한을 생략할 수도 있습니다.

Redshift

{
    "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기존 데이터베이스 사용자로 데이터베이스에 연결합니다.
RedshiftConnectAsIAMRoleIAM 역할을 가정하여 역할의 IAM 권한에서 1:1로 매핑된 권한으로 데이터베이스에 연결합니다.
RedshiftFetchMetadataAWS 태그를 데이터베이스 레이블로 자동으로 가져오거나 데이터베이스의 AWS 리전과 같은 누락된 정보를 찾습니다.

RedshiftConnectAsDBUser 문장의 범위를 줄이려면 특정 사용자, 데이터베이스 및 데이터베이스 그룹만 허용하도록 업데이트할 수 있습니다.
지정할 수 있는 리소스 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 문장은 사용하고자 하는 방법에 대해서만 필요합니다.
IAM 역할이 데이터베이스 서비스의 신원을 신뢰할 수 있는 주체로 지정하고, 두 신원이 동일한 AWS 계정에 있는 경우,
RedshiftConnectAsIAMRole 문장도 생략할 수 있습니다.

텔레포트 검색 서비스에 의해 발견된 데이터베이스는 완전한 메타데이터로 등록해야 하므로, 모든 AWS 데이터베이스가 자동 검색되는 경우 RedshiftFetchMetadata 권한을 생략할 수도 있습니다.

IAM 역할을 Redshift 데이터베이스 사용자로 사용하기

다음 권한 정책은 Teleport 사용자가 데이터베이스 사용자로 지정할 수 있는 IAM 역할에 연결되어야 합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RedshiftConnectWithIAM",
      "Effect": "Allow",
      "Action": "redshift:GetClusterCredentialsWithIAM",
      "Resource": "*"
    }
  ]
}
Statement목적
RedshiftConnectWithIAM이 IAM 아이덴티티에서 1:1로 매핑된 데이터베이스 사용자로 Redshift 데이터베이스에 연결합니다.

IAM 역할은 아이덴티티의 IAM 권한에서 1:1로 매핑된 권한으로 자동으로 생성된 데이터베이스 사용자로 연결할 수 있습니다. 데이터베이스의 권한은 IAM 아이덴티티에 연결된 redshift-data:* 문을 통해 부여되며, 예를 들어 redshift-data:GetStatementResult 가 있습니다. Teleport 사용자는 데이터베이스 사용자로 "role/{RoleName}"을 지정하여 해당 역할로 연결할 수 있습니다. 예를 들면:

tsh db connect redshift-example-db --db-user=role/redshift-user-role

사용자 아이덴티티 기반 정책을 Amazon Redshift에 사용하는 방법에 대한 자세한 내용은 Using identity-based policies for Amazon Redshift를 참조하십시오.

IAM 역할 teleport-db-service-role 이 IAM 역할 redshift-user-role 를 가정할 수 있도록 허용하려면, 일반적으로 다음이 필요합니다:

1. redshift-user-role의 신뢰 관계 구성

teleport-db-service-role 또는 해당 AWS 계정은 redshift-user-role의 신뢰 정책에서 Principal 로 설정되어야 합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id:role/teleport-db-service-role"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
{
  "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의 권한 정책 구성

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-roleredshift-user-role가 같은 AWS 계정에 있고 teleport-db-service-role의 전체 ARN이 redshift-user-role의 신뢰 정책에 Principal로 구성되어 있을 때 생략할 수 있습니다.

3. teleport-db-service-role의 권한 경계 구성

teleport-db-service-role에 부착된 권한 경계 가 없는 경우 이 단계를 건너뛸 수 있습니다. 그렇지 않으면 teleport-db-service-role에 부착된 경계 정책은 sts:AssumeRole 권한을 포함해야 합니다. 예를 들면:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

Redshift 서버리스

{
    "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": "*"
        }
    ]
}
StatementPurpose
RedshiftServerlessFetchMetadataAWS 태그를 데이터베이스 레이블로 자동으로 가져오거나 데이터베이스의 AWS 리전과 같은 누락된 정보를 찾습니다.
RedshiftServerlessConnectAsIAMRole데이터베이스 사용자로 연결하기 위해 IAM 역할을 가정합니다.

텔레포트 검색 서비스에 의해 발견된 데이터베이스는 완전한 메타데이터로 등록해야 하므로, 모든 AWS 데이터베이스가 자동 검색되는 경우 RedshiftServerlessFetchMetadata 권한을 생략할 수도 있습니다.

Redshift Serverless는 IAM 역할을 데이터베이스 사용자에 매핑합니다. Teleport 데이터베이스 서비스는 IAM 인증 토큰을 생성하기 위해 이러한 "액세스" IAM 역할을 가정할 수 있어야 합니다.

IAM 역할을 Redshift 서버리스 데이터베이스 사용자로 사용하기

다음 권한 정책은 Teleport 사용자가 데이터베이스 사용자로 지정할 수 있는 IAM 역할에 연결되어야 합니다.

{
    "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목적
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 권한 구성에 대한 자세한 내용은 Amazon Redshift Serverless의 IAM 및 액세스 관리 를 참조하십시오.

IAM 역할 teleport-db-service-role 이 IAM 역할 redshift-serverless-user-role 를 가정할 수 있도록 허용하려면, 일반적으로 다음이 필요합니다:

1. redshift-serverless-user-role의 신뢰 관계 구성

teleport-db-service-role 또는 해당 AWS 계정은 redshift-serverless-user-role의 신뢰 정책에서 Principal 로 설정되어야 합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id:role/teleport-db-service-role"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
{
  "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의 권한 정책 구성

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-roleredshift-serverless-user-role가 같은 AWS 계정에 있고 teleport-db-service-role의 전체 ARN이 redshift-serverless-user-role의 신뢰 정책에 Principal로 구성되어 있을 때 생략할 수 있습니다.

3. teleport-db-service-role의 권한 경계 구성

teleport-db-service-role에 부착된 권한 경계 가 없는 경우 이 단계를 건너뛸 수 있습니다. 그렇지 않으면 teleport-db-service-role에 부착된 경계 정책은 sts:AssumeRole 권한을 포함해야 합니다. 예를 들면:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
Teleport 원문 보기