resource "aws_iam_policy" "s3_custom_policy" {
name = "s3-custom-policy"
description = "Custom policy to allow S3 bucket access"
policy = jsonencode({
Version = "2012-10-17",
Statement = [{
Action = [
"s3:GetObject",
"s3:PutObject"
],
Effect = "Allow",
Resource = "arn:aws:s3:::my-bucket/*"
}]
})
}
resource "aws_iam_role_policy_attachment" "s3_policy_attachment" {
role = aws_iam_role.lambda_exec_role.name
policy_arn = aws_iam_policy.s3_custom_policy.arn
}
위의 aws_iam_policy와 aws_iam_role_policy_attachment 리소스는 특정 IAM 역할(lambda_exec_role)에 사용자 정의 S3 접근 권한을 부여하는 구성이다.
aws_iam_policy 리소스 설명
aws_iam_policy는 사용자 정의 IAM 정책을 생성하는 리소스이다.
- name
- 설명: 정책의 이름을 지정한다. 이 이름은 AWS 콘솔이나 CLI에서 정책을 식별하는 데 사용
- 예시: s3-custom-policy는 사용자가 지정한 정책 이름
- 다른 예시:
- lambda-execution-policy: Lambda 실행을 위한 정책
- read-only-s3-policy: S3 읽기 전용 정책
- description
- 설명: 정책에 대한 설명을 작성한다. 이 필드는 정책의 목적을 명확하게 기술할 때 유용
- 예시: "Custom policy to allow S3 bucket access"는 정책의 목적을 설명
- 다른 예시:
- "Policy for Lambda execution with S3 access": Lambda가 S3에 접근할 수 있도록 허용하는 정책 설명
- policy
- 설명: JSON 형식으로 IAM 정책의 본문을 정의한다. jsonencode 함수를 사용하여 정책을 JSON 형식으로 변환
- 예시 설명:
- Version: 정책 언어의 버전. AWS에서는 주로 2012-10-17을 사용
- Statement: 정책의 본문을 정의하는 필드로, 각 Statement는 허용하거나 금지할 작업을 정의
- Action: IAM 엔터티(역할, 사용자 등)가 수행할 수 있는 작업을 정의
- s3:GetObject: S3 버킷에서 객체를 읽는 권한
- s3:PutObject: S3 버킷에 객체를 쓰는 권한
- Effect: 작업을 허용(Allow)하거나 거부(Deny)할지 결정
- Resource: 작업이 수행될 리소스를 지정한다. 이 경우, arn:aws:s3:::my-bucket/*은 특정 S3 버킷(my-bucket)의 모든 객체를 의미
다양한 policy 예시
1. S3 버킷 전체 접근 허용
- S3 버킷의 모든 객체에 대해 모든 작업을 허용하는 정책
policy = jsonencode({
Version = "2012-10-17",
Statement = [{
Action = "s3:*", # S3의 모든 작업 허용
Effect = "Allow",
Resource = "arn:aws:s3:::my-bucket/*"
}]
})
2. S3 읽기 전용 정책
- S3 버킷에 대해 읽기 전용 권한만 부여하는 정책
policy = jsonencode({
Version = "2012-10-17",
Statement = [{
Action = "s3:GetObject", # 읽기 작업만 허용
Effect = "Allow",
Resource = "arn:aws:s3:::my-bucket/*"
}]
})
3. 특정 파일에 대한 접근 제한
- S3 버킷 내 특정 파일에만 접근 권한을 부여
policy = jsonencode({
Version = "2012-10-17",
Statement = [{
Action = ["s3:GetObject", "s3:PutObject"],
Effect = "Allow",
Resource = "arn:aws:s3:::my-bucket/specific-file.txt" # 특정 파일에 대한 접근만 허용
}]
})
4. S3의 객체 삭제 허용
- S3에서 객체를 삭제할 수 있는 권한을 부여
policy = jsonencode({
Version = "2012-10-17",
Statement = [{
Action = "s3:DeleteObject", # 삭제 작업 허용
Effect = "Allow",
Resource = "arn:aws:s3:::my-bucket/*"
}]
})
aws_iam_role_policy_attachment 리소스 설명
aws_iam_role_policy_attachment는 IAM 역할에 정책을 연결하는 리소스
resource "aws_iam_role_policy_attachment" "s3_policy_attachment" {
role = aws_iam_role.lambda_exec_role.name
policy_arn = aws_iam_policy.s3_custom_policy.arn
}
- role
- 설명: 정책을 연결할 IAM 역할을 지정한다. 이 예제에서는 aws_iam_role.lambda_exec_role.name을 사용하여, 이미 정의된 lambda_exec_role 역할에 정책을 연결한다.
- 다른 예시:
- Lambda 역할에 정책을 연결하려면: aws_iam_role.lambda_exec_role.name
- EC2 역할에 정책을 연결하려면: aws_iam_role.ec2_instance_role.name
- policy_arn
- 설명: 연결할 정책의 ARN(Amazon Resource Name)을 지정한다. 이 예제에서는 위에서 정의한 aws_iam_policy.s3_custom_policy.arn을 사용한다.
- 다른 예시:
- Amazon S3 전체 접근 권한을 연결하려면: arn:aws:iam::aws:policy/AmazonS3FullAccess.
- Lambda 실행 권한을 연결하려면: arn:aws:iam::aws:policy/AWSLambdaExecute.
다양한 aws_iam_role_policy_attachment 예시
1. Amazon S3 전체 접근 정책 연결
- Lambda 역할에 S3 전체 접근 정책을 연결한다.
resource "aws_iam_role_policy_attachment" "lambda_s3_full_access" {
role = aws_iam_role.lambda_exec_role.name
policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
}
2. Amazon DynamoDB 읽기 전용 정책 연결
- Lambda 역할에 DynamoDB에 대한 읽기 전용 권한을 부여한다.
resource "aws_iam_role_policy_attachment" "lambda_dynamodb_readonly" {
role = aws_iam_role.lambda_exec_role.name
policy_arn = "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess"
}
3. Amazon S3 읽기 전용 정책 연결
- EC2 인스턴스 역할에 S3 읽기 전용 정책을 연결한다.
resource "aws_iam_role_policy_attachment" "ec2_s3_readonly" {
role = aws_iam_role.ec2_instance_role.name
policy_arn = "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"
}
4. CloudWatch 로그 작성 권한 연결
- Lambda 역할에 CloudWatch 로그 작성 권한을 연결한다.
resource "aws_iam_role_policy_attachment" "lambda_cloudwatch_logs" {
role = aws_iam_role.lambda_exec_role.name
policy_arn = "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess"
}
요약
- aws_iam_policy는 사용자 정의 IAM 정책을 생성하는 리소스
- name: 정책의 이름을 설정한다.
- description: 정책에 대한 설명을 제공한다.
- policy: JSON 형식의 정책 본문을 정의한다.
- aws_iam_role_policy_attachment는 특정 IAM 역할에 정책을 연결하는 리소스
- role: 정책을 연결할 IAM 역할을 지정한다.
- policy_arn: 연결할 정책의 ARN을 지정한다.
위와 같이 aws_iam_policy를 통해 S3 접근 권한을 정의하고, aws_iam_role_policy_attachment를 통해 해당 권한을 Lambda 역할에 연결할 수 있다.
'AWS' 카테고리의 다른 글
AWS VPC, 2개 AZ, Subnet, Internet G/W, Application LB, Route53, DirectConnect, Transit G/W 연결 IaC 테스트 방법 (0) | 2024.10.23 |
---|---|
AWS KMS(Key Management Service) IaC 사용법과 예시 (0) | 2024.10.23 |
AWS Roles(역할) aws_iam_role의 assume_role_policy 사용법 (0) | 2024.10.23 |
AWS IAM 관리형 정책 (Managed Policies) (0) | 2024.10.23 |
AWS IAM(Identity and Access Management) 사용법 (1) | 2024.10.23 |