본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

AWS IAM

원문 보기 위키 갱신

AWS IAM (AWS Identity and Access Management)

AWS2 IAM 컴포넌트는 AWS IAM 사용자, 그룹, 역할, 정책, 인스턴스 프로파일을 생성하고 관리할 수 있게 해 주는 컴포넌트예요. Camel 3.1부터 제공됐고 producer만 지원합니다. 사용자·그룹·역할·정책 연산과 정책 연결(attach/detach) 연산을 제공하고, region, pojoRequest, 자격 증명 관련 옵션들을 설정할 수 있어요.

출처: 문서

본문

Camel 3.1부터 지원

producer만 지원해요

AWS2 IAM 컴포넌트는 AWS IAM 인스턴스의 create, run, start, stop, terminate를 지원해요.

준비물 (Prerequisites)

유효한 Amazon Web Services 개발자 계정이 있고 Amazon IAM을 사용하도록 가입되어 있어야 해요. 자세한 정보는 Amazon IAM에서 확인할 수 있습니다.

URI 형식 (URI Format)

aws2-iam://label[?options]

다음 형식으로 URI에 쿼리 옵션을 붙일 수 있어요:

?options=value&option2=value&…​

참고 AWS2 IAM 컴포넌트는 aws-global 리전에서 동작하고, 기본 리전으로 aws-global을 사용해요.

옵션 설정 방법 (Configuring Options)

Camel 컴포넌트는 두 단계로 나눠 설정합니다:

  • 컴포넌트(component) 레벨

  • 엔드포인트(endpoint) 레벨

컴포넌트 옵션 설정 (Configuring Component Options)

컴포넌트 레벨에서는 엔드포인트들이 이어서 물려받는 일반적이고 공유되는 설정을 해요. 가장 상위의 설정 레벨이죠.

예를 들어 컴포넌트에는 보안 설정, 인증용 자격 증명, 네트워크 연결 URL 같은 것들이 있을 수 있어요.

컴포넌트에 따라 옵션이 몇 개뿐인 것도 있고 아주 많은 것도 있어요. 컴포넌트는 보통 널리 쓰이는 기본값이 미리 설정되어 있어서, 몇 가지 옵션만 설정하거나 아예 하나도 건드리지 않아도 되는 경우가 많아요.

컴포넌트는 다음 방법으로 설정할 수 있어요:

  • the Component DSL.

  • 설정 파일(application.properties, *.yaml 파일 등).

  • Java 코드에서 직접.

엔드포인트 옵션 설정 (Configuring Endpoint Options)

엔드포인트는 옵션이 많아서 설정에 시간을 더 쓰게 될 거예요. 이 옵션들이 엔드포인트가 원하는 일을 하도록 커스터마이즈해 줘요. 옵션은 엔드포인트가 consumer(from)로 쓰이는지, producer(to)로 쓰이는지, 둘 다인지에 따라 분류되기도 해요.

엔드포인트 설정은 대부분 엔드포인트 URI에 _path_와 query 파라미터로 바로 하는 경우가 많아요. Java에서 엔드포인트와 데이터 포맷을 _타입 세이프_하게 설정하려면 Endpoint DSL과 DataFormat DSL을 쓸 수도 있어요.

옵션을 설정할 때 좋은 습관은 Property Placeholders를 사용하는 거예요.

프로퍼티 플레이스홀더는 이런 장점이 있어요:

  • URL, 포트 번호, 민감한 정보 같은 설정을 하드코딩하는 걸 막아 줘요.

  • 설정을 코드 밖으로 분리할 수 있어요.

  • 코드가 더 유연해지고 재사용하기 좋아져요.

다음 두 섹션에서 모든 옵션을 나열해요. 먼저 컴포넌트 옵션, 그다음 엔드포인트 옵션 순서예요.

컴포넌트 옵션 (Component Options)

AWS IAM 컴포넌트가 지원하는 옵션은 아래와 같아요.

Name Description Default Type
configuration (producer) 컴포넌트 설정이에요. IAM2Configuration
iamClient (producer) Autowired 이미 설정된 AWS IAM 클라이언트를 사용해요. IamClient
lazyStartProducer (producer) producer를 lazy(첫 메시지 시점)로 시작할지 여부예요. lazy 시작을 쓰면 producer가 시작 중 실패해서 라우트 시작이 실패하는 상황에서도 CamelContext와 라우트를 시작할 수 있고, 시작 실패 처리를 Camel의 라우팅 에러 핸들러로 넘길 수 있어요. 다만 첫 메시지를 처리하는 시점에 producer를 만들고 시작하는 데 시간이 조금 걸려서 전체 처리 시간이 길어질 수 있다는 점은 유의하세요. false boolean
operation (producer)

수행할 연산이에요. 컴포넌트 레벨에서 기본 연산을 설정하거나, 엔드포인트 일부로 연산을 지정하거나, CamelAwsIAMOperation 키를 가진 메시지 헤더로 전달할 수 있어요.

Enum values:

  • listAccessKeys

  • createUser

  • deleteUser

  • getUser

  • listUsers

  • createAccessKey

  • deleteAccessKey

  • updateAccessKey

  • createGroup

  • deleteGroup

  • listGroups

  • addUserToGroup

  • removeUserFromGroup

  • createRole

  • deleteRole

  • getRole

  • listRoles

  • createPolicy

  • deletePolicy

  • getPolicy

  • listPolicies

  • attachUserPolicy

  • detachUserPolicy

  • attachGroupPolicy

  • detachGroupPolicy

  • attachRolePolicy

  • detachRolePolicy

  • createInstanceProfile

  • deleteInstanceProfile

  • getInstanceProfile

  • listInstanceProfiles

  • addRoleToInstanceProfile

  • removeRoleFromInstanceProfile

| | IAM2Operations | | overrideEndpoint (producer) | 엔드포인트를 오버라이드할 필요가 있는지 설정해요. 이 옵션은 uriEndpointOverride 옵션과 조합해서 써야 합니다. | false | boolean | | pojoRequest (producer) | POJO 요청을 본문으로 쓸지 여부예요. | false | boolean | | region (producer) |

IAM 클라이언트가 동작할 리전이에요. 이 파라미터를 쓰면 설정은 리전의 소문자 이름(예: ap-east-1)을 기대하고, Region.EU_WEST_1.id() 형태의 이름을 써야 해요.

Enum values:

  • ap-south-2

  • ap-south-1

  • eu-south-1

  • eu-south-2

  • us-gov-east-1

  • me-central-1

  • il-central-1

  • ca-central-1

  • eu-central-1

  • us-iso-west-1

  • eu-central-2

  • us-west-1

  • us-west-2

  • af-south-1

  • eu-north-1

  • eu-west-3

  • eu-west-2

  • eu-west-1

  • ap-northeast-3

  • ap-northeast-2

  • ap-northeast-1

  • me-south-1

  • sa-east-1

  • ap-east-1

  • cn-north-1

  • us-gov-west-1

  • ap-southeast-1

  • ap-southeast-2

  • us-iso-east-1

  • ap-southeast-3

  • ap-southeast-4

  • us-east-1

  • us-east-2

  • cn-northwest-1

  • us-isob-east-1

  • aws-global

  • aws-cn-global

  • aws-us-gov-global

  • aws-iso-global

  • aws-iso-b-global

| aws-global | String | | uriEndpointOverride (producer) | 오버라이드할 URI 엔드포인트를 설정해요. 이 옵션은 overrideEndpoint 옵션과 조합해서 써야 합니다. | | String | | autowiredEnabled (advanced) | 오토와이어링 사용 여부예요. 레지스트리에서 일치하는 타입의 인스턴스가 하나만 있는지 찾아서 컴포넌트에 자동으로 설정하는(옵션이 autowired로 표시돼 있어야 함) 자동 오토와이어링에 쓰입니다. JDBC 데이터 소스, JMS 커넥션 팩토리, AWS 클라이언트 등을 자동 설정할 때 유용해요. | true | boolean | | healthCheckConsumerEnabled (health) | 이 컴포넌트의 consumer 기반 헬스 체크를 모두 켜고 끌 때 사용해요. | true | boolean | | healthCheckProducerEnabled (health) | 이 컴포넌트의 producer 기반 헬스 체크를 모두 켜고 끌 때 사용해요. 참고: Camel은 기본으로 producer 기반 헬스 체크를 모두 꺼 둬요. camel.health.producersEnabled=true로 설정하면 producer 체크를 전역으로 켤 수 있습니다. | true | boolean | | proxyHost (proxy) | IAM 클라이언트를 만들 때 사용할 프록시 호스트를 지정해요. | | String | | proxyPort (proxy) | IAM 클라이언트를 만들 때 사용할 프록시 포트를 지정해요. | | Integer | | proxyProtocol (proxy) |

IAM 클라이언트를 만들 때 사용할 프록시 프로토콜을 지정해요.

Enum values:

  • HTTP

  • HTTPS

| HTTPS | Protocol | | accessKey (security) | Amazon AWS Access Key예요. | | String | | profileCredentialsName (security) | 프로파일 자격 증명 프로바이더를 쓸 때 이 파라미터가 프로파일 이름을 지정해요. | | String | | secretKey (security) | Amazon AWS Secret Key예요. | | String | | sessionToken (security) | 사용자가 IAM 역할을 수행(assume)해야 할 때 쓰는 Amazon AWS Session Token이에요. | | String | | trustAllCertificates (security) | 엔드포인트를 오버라이드하는 경우 모든 인증서를 신뢰할지 여부예요. | false | boolean | | useDefaultCredentialsProvider (security) | IAM 클라이언트가 기본 자격 증명 프로바이더를 통해 자격 증명을 읽을지, 아니면 정적 자격 증명이 전달될 것으로 기대할지 설정해요. | false | boolean | | useProfileCredentialsProvider (security) | IAM 클라이언트가 프로파일 자격 증명 프로바이더를 통해 자격 증명을 읽을지 설정해요. | false | boolean | | useSessionCredentials (security) | IAM 클라이언트가 세션 자격 증명(Session Credentials)을 쓸지 설정해요. IAM에서 연산을 수행하기 위해 사용자가 IAM 역할을 수행(assume)해야 하는 상황에서 유용합니다. | false | boolean |

엔드포인트 옵션 (Endpoint Options)

AWS IAM 엔드포인트는 다음 URI 문법으로 설정해요:

aws2-iam:label

다음 _path_와 query 파라미터를 씁니다:

경로 파라미터 (Path Parameters)

Name Description Default Type
label (producer) 필수 논리적 이름이에요. String

쿼리 파라미터 (Query Parameters)

Name Description Default Type
iamClient (producer) Autowired 이미 설정된 AWS IAM 클라이언트를 사용해요. IamClient
operation (producer)

수행할 연산이에요. 컴포넌트 레벨에서 기본 연산을 설정하거나, 엔드포인트 일부로 연산을 지정하거나, CamelAwsIAMOperation 키를 가진 메시지 헤더로 전달할 수 있어요.

Enum values:

  • listAccessKeys

  • createUser

  • deleteUser

  • getUser

  • listUsers

  • createAccessKey

  • deleteAccessKey

  • updateAccessKey

  • createGroup

  • deleteGroup

  • listGroups

  • addUserToGroup

  • removeUserFromGroup

  • createRole

  • deleteRole

  • getRole

  • listRoles

  • createPolicy

  • deletePolicy

  • getPolicy

  • listPolicies

  • attachUserPolicy

  • detachUserPolicy

  • attachGroupPolicy

  • detachGroupPolicy

  • attachRolePolicy

  • detachRolePolicy

  • createInstanceProfile

  • deleteInstanceProfile

  • getInstanceProfile

  • listInstanceProfiles

  • addRoleToInstanceProfile

  • removeRoleFromInstanceProfile

| | IAM2Operations | | overrideEndpoint (producer) | 엔드포인트를 오버라이드할 필요가 있는지 설정해요. 이 옵션은 uriEndpointOverride 옵션과 조합해서 써야 합니다. | false | boolean | | pojoRequest (producer) | POJO 요청을 본문으로 쓸지 여부예요. | false | boolean | | region (producer) |

IAM 클라이언트가 동작할 리전이에요. 이 파라미터를 쓰면 설정은 리전의 소문자 이름(예: ap-east-1)을 기대하고, Region.EU_WEST_1.id() 형태의 이름을 써야 해요.

Enum values:

  • ap-south-2

  • ap-south-1

  • eu-south-1

  • eu-south-2

  • us-gov-east-1

  • me-central-1

  • il-central-1

  • ca-central-1

  • eu-central-1

  • us-iso-west-1

  • eu-central-2

  • us-west-1

  • us-west-2

  • af-south-1

  • eu-north-1

  • eu-west-3

  • eu-west-2

  • eu-west-1

  • ap-northeast-3

  • ap-northeast-2

  • ap-northeast-1

  • me-south-1

  • sa-east-1

  • ap-east-1

  • cn-north-1

  • us-gov-west-1

  • ap-southeast-1

  • ap-southeast-2

  • us-iso-east-1

  • ap-southeast-3

  • ap-southeast-4

  • us-east-1

  • us-east-2

  • cn-northwest-1

  • us-isob-east-1

  • aws-global

  • aws-cn-global

  • aws-us-gov-global

  • aws-iso-global

  • aws-iso-b-global

| aws-global | String | | uriEndpointOverride (producer) | 오버라이드할 URI 엔드포인트를 설정해요. 이 옵션은 overrideEndpoint 옵션과 조합해서 써야 합니다. | | String | | lazyStartProducer (producer (advanced)) | producer를 lazy(첫 메시지 시점)로 시작할지 여부예요. lazy 시작을 쓰면 producer가 시작 중 실패해서 라우트 시작이 실패하는 상황에서도 CamelContext와 라우트를 시작할 수 있고, 시작 실패 처리를 Camel의 라우팅 에러 핸들러로 넘길 수 있어요. 다만 첫 메시지를 처리하는 시점에 producer를 만들고 시작하는 데 시간이 조금 걸려서 전체 처리 시간이 길어질 수 있다는 점은 유의하세요. | false | boolean | | proxyHost (proxy) | IAM 클라이언트를 만들 때 사용할 프록시 호스트를 지정해요. | | String | | proxyPort (proxy) | IAM 클라이언트를 만들 때 사용할 프록시 포트를 지정해요. | | Integer | | proxyProtocol (proxy) |

IAM 클라이언트를 만들 때 사용할 프록시 프로토콜을 지정해요.

Enum values:

  • HTTP

  • HTTPS

| HTTPS | Protocol | | accessKey (security) | Amazon AWS Access Key예요. | | String | | profileCredentialsName (security) | 프로파일 자격 증명 프로바이더를 쓸 때 이 파라미터가 프로파일 이름을 지정해요. | | String | | secretKey (security) | Amazon AWS Secret Key예요. | | String | | sessionToken (security) | 사용자가 IAM 역할을 수행(assume)해야 할 때 쓰는 Amazon AWS Session Token이에요. | | String | | trustAllCertificates (security) | 엔드포인트를 오버라이드하는 경우 모든 인증서를 신뢰할지 여부예요. | false | boolean | | useDefaultCredentialsProvider (security) | IAM 클라이언트가 기본 자격 증명 프로바이더를 통해 자격 증명을 읽을지, 아니면 정적 자격 증명이 전달될 것으로 기대할지 설정해요. | false | boolean | | useProfileCredentialsProvider (security) | IAM 클라이언트가 프로파일 자격 증명 프로바이더를 통해 자격 증명을 읽을지 설정해요. | false | boolean | | useSessionCredentials (security) | IAM 클라이언트가 세션 자격 증명(Session Credentials)을 쓸지 설정해요. IAM에서 연산을 수행하기 위해 사용자가 IAM 역할을 수행(assume)해야 하는 상황에서 유용합니다. | false | boolean |

메시지 헤더 (Message Headers)

AWS IAM 컴포넌트가 지원하는 메시지 헤더는 아래와 같아요:

Name Description Default Type
CamelAwsIAMOperation (producer) Constant: OPERATION 수행하려는 연산이에요. String
CamelAwsIAMUsername (producer) Constant: USERNAME 관리하려는 사용자의 사용자 이름이에요. String
CamelAwsIAMAccessKeyID (producer) Constant: ACCESS_KEY_ID 관리하려는 accessKey예요. String
CamelAwsIAMAccessKeyStatus (producer) Constant: ACCESS_KEY_STATUS 설정하려는 AccessKey 상태예요. 가능한 값은 active와 inactive입니다. String
CamelAwsIAMGroupName (producer) Constant: GROUP_NAME AWS IAM 그룹의 이름이에요. String
CamelAwsIAMGroupPath (producer) Constant: GROUP_PATH AWS IAM 그룹의 경로예요. String
CamelAwsIAMMarker (producer) Constant: MARKER list 연산에서 페이지네이션에 쓸 마커예요. String
CamelAwsIAMMaxItems (producer) Constant: MAX_ITEMS list 연산에서 반환할 최대 항목 수예요. Integer
CamelAwsIAMIsTruncated (producer) Constant: IS_TRUNCATED list 응답이 잘렸는지(결과가 더 있는지) 여부예요. Boolean
CamelAwsIAMNextMarker (producer) Constant: NEXT_MARKER 다음 페이지 결과에 쓸 마커예요. String
CamelAwsIAMUserArn (producer) Constant: USER_ARN 만들었거나 조회한 사용자의 ARN이에요. String
CamelAwsIAMUserId (producer) Constant: USER_ID 만들었거나 조회한 사용자의 ID예요. String
CamelAwsIAMGroupArn (producer) Constant: GROUP_ARN 만들었거나 조회한 그룹의 ARN이에요. String
CamelAwsIAMGroupId (producer) Constant: GROUP_ID 만들었거나 조회한 그룹의 ID예요. String
CamelAwsIAMRoleName (producer) Constant: ROLE_NAME AWS IAM 역할(Role)의 이름이에요. String
CamelAwsIAMRolePath (producer) Constant: ROLE_PATH AWS IAM 역할(Role)의 경로예요. String
CamelAwsIAMAssumeRolePolicyDocument (producer) Constant: ASSUME_ROLE_POLICY_DOCUMENT 역할의 assume role 정책 문서예요. String
CamelAwsIAMRoleArn (producer) Constant: ROLE_ARN 만들었거나 조회한 역할의 ARN이에요. String
CamelAwsIAMRoleId (producer) Constant: ROLE_ID 만들었거나 조회한 역할의 ID예요. String
CamelAwsIAMRoleDescription (producer) Constant: ROLE_DESCRIPTION AWS IAM 역할(Role)의 설명이에요. String
CamelAwsIAMPolicyName (producer) Constant: POLICY_NAME AWS IAM 정책(Policy)의 이름이에요. String
CamelAwsIAMPolicyPath (producer) Constant: POLICY_PATH AWS IAM 정책(Policy)의 경로예요. String
CamelAwsIAMPolicyDocument (producer) Constant: POLICY_DOCUMENT 정책 문서예요. String
CamelAwsIAMPolicyArn (producer) Constant: POLICY_ARN AWS IAM 정책(Policy)의 ARN이에요. String
CamelAwsIAMPolicyId (producer) Constant: POLICY_ID AWS IAM 정책(Policy)의 ID예요. String
CamelAwsIAMPolicyDescription (producer) Constant: POLICY_DESCRIPTION AWS IAM 정책(Policy)의 설명이에요. String
CamelAwsIAMInstanceProfileName (producer) Constant: INSTANCE_PROFILE_NAME AWS IAM 인스턴스 프로파일(Instance Profile)의 이름이에요. String
CamelAwsIAMInstanceProfilePath (producer) Constant: INSTANCE_PROFILE_PATH AWS IAM 인스턴스 프로파일(Instance Profile)의 경로예요. String
CamelAwsIAMInstanceProfileArn (producer) Constant: INSTANCE_PROFILE_ARN AWS IAM 인스턴스 프로파일(Instance Profile)의 ARN이에요. String
CamelAwsIAMInstanceProfileId (producer) Constant: INSTANCE_PROFILE_ID AWS IAM 인스턴스 프로파일(Instance Profile)의 ID예요. String

IAM 컴포넌트 필수 옵션 (Required IAM component options)

Amazon IAM 서비스에 접근하려면 레지스트리에 amazonIAMClient(IAM 클라이언트)를 제공하거나 accessKey와 secretKey를 지정해야 해요.

사용법 (Usage)

정적 자격 증명, 기본 자격 증명 프로바이더, 프로파일 자격 증명 프로바이더 (Static credentials, Default Credential Provider and Profile Credentials Provider)

useDefaultCredentialsProvider 옵션을 지정하고 true로 설정하면, 명시적인 정적 자격 증명을 쓰지 않도록 할 수 있어요.

기본 자격 증명 프로바이더(Default Credentials Provider)의 평가 순서는 다음과 같아요:

  • Java 시스템 프로퍼티 - aws.accessKeyId와 aws.secretKey.

  • 환경 변수 - AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY.

  • AWS STS의 Web Identity Token.

  • 공유 credentials 및 config 파일.

  • Amazon ECS 컨테이너 자격 증명 - 환경 변수 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI가 설정돼 있으면 Amazon ECS에서 읽어와요.

  • Amazon EC2 인스턴스 프로파일 자격 증명.

useProfileCredentialsProvider 옵션을 true로 지정하고 profileCredentialsName에 프로파일 이름을 넣으면, 프로파일 자격 증명 프로바이더(Profile Credentials Provider)를 쓸 수도 있어요.

정적, 기본, 프로파일 자격 증명 중 한 가지만 동시에 사용할 수 있어요.

이에 대한 자세한 내용은 AWS credentials documentation에서 확인하세요.

IAM producer 연산 (IAM Producer operations)

Camel-AWS2 IAM 컴포넌트는 producer 쪽에서 다음 연산을 제공해요:

  • listAccessKeys

  • createUser

  • deleteUser

  • listUsers

  • getUser

  • createAccessKey

  • deleteAccessKey

  • updateAccessKey

  • createGroup

  • deleteGroup

  • listGroups

  • addUserToGroup

  • removeUserFromGroup

  • createRole

  • deleteRole

  • getRole

  • listRoles

  • createPolicy

  • deletePolicy

  • getPolicy

  • listPolicies

  • attachUserPolicy

  • detachUserPolicy

  • attachGroupPolicy

  • detachGroupPolicy

  • attachRolePolicy

  • detachRolePolicy

  • createInstanceProfile

  • deleteInstanceProfile

  • getInstanceProfile

  • listInstanceProfiles

  • addRoleToInstanceProfile

  • removeRoleFromInstanceProfile

예시 (Examples)

  • createUser: IAM에서 사용자를 하나 만드는 연산이에요.
from("direct:createUser")
    .setHeader("CamelAwsIAMUsername", constant("camel"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createUser");
<route>
    <from uri="direct:createUser"/>
    <setHeader name="CamelAwsIAMUsername">
        <constant>camel</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=createUser"/>
</route>
- route:
    from:
      uri: direct:createUser
      steps:
        - setHeader:
            name: CamelAwsIAMUsername
            constant: camel
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: createUser
  • deleteUser: IAM에서 사용자를 삭제하는 연산이에요.
from("direct:deleteUser")
    .setHeader("CamelAwsIAMUsername", constant("camel"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=deleteUser");
<route>
    <from uri="direct:deleteUser"/>
    <setHeader name="CamelAwsIAMUsername">
        <constant>camel</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=deleteUser"/>
</route>
- route:
    from:
      uri: direct:deleteUser
      steps:
        - setHeader:
            name: CamelAwsIAMUsername
            constant: camel
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: deleteUser
  • listUsers: IAM에서 사용자 목록을 조회하는 연산이에요.
from("direct:listUsers")
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listUsers");
<route>
    <from uri="direct:listUsers"/>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=listUsers"/>
</route>
- route:
    from:
      uri: direct:listUsers
      steps:
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: listUsers
  • createGroup: IAM에서 그룹을 추가하는 연산이에요.
from("direct:createGroup")
    .setHeader("CamelAwsIAMGroupName", constant("camel"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createGroup");
<route>
    <from uri="direct:createGroup"/>
    <setHeader name="CamelAwsIAMGroupName">
        <constant>camel</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=createGroup"/>
</route>
- route:
    from:
      uri: direct:createGroup
      steps:
        - setHeader:
            name: CamelAwsIAMGroupName
            constant: camel
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: createGroup
  • deleteGroup: IAM에서 그룹을 삭제하는 연산이에요.
from("direct:deleteGroup")
    .setHeader("CamelAwsIAMGroupName", constant("camel"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=deleteGroup");
<route>
    <from uri="direct:deleteGroup"/>
    <setHeader name="CamelAwsIAMGroupName">
        <constant>camel</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=deleteGroup"/>
</route>
- route:
    from:
      uri: direct:deleteGroup
      steps:
        - setHeader:
            name: CamelAwsIAMGroupName
            constant: camel
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: deleteGroup
  • listGroups: IAM에서 그룹 목록을 조회하는 연산이에요.
from("direct:listGroups")
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listGroups");
<route>
    <from uri="direct:listGroups"/>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=listGroups"/>
</route>
- route:
    from:
      uri: direct:listGroups
      steps:
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: listGroups

역할(Role) 연산

  • createRole: IAM에서 역할을 만드는 연산이에요.
from("direct:createRole")
    .setHeader("CamelAwsIAMRoleName", constant("myRole"))
    .setHeader("CamelAwsIAMAssumeRolePolicyDocument", constant("{...}"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createRole");
<route>
    <from uri="direct:createRole"/>
    <setHeader name="CamelAwsIAMRoleName">
        <constant>myRole</constant>
    </setHeader>
    <setHeader name="CamelAwsIAMAssumeRolePolicyDocument">
        <constant>{...}</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=createRole"/>
</route>
- route:
    from:
      uri: direct:createRole
      steps:
        - setHeader:
            name: CamelAwsIAMRoleName
            constant: myRole
        - setHeader:
            name: CamelAwsIAMAssumeRolePolicyDocument
            constant: "{...}"
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: createRole
  • deleteRole: IAM에서 역할을 삭제하는 연산이에요.
from("direct:deleteRole")
    .setHeader("CamelAwsIAMRoleName", constant("myRole"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=deleteRole");
<route>
    <from uri="direct:deleteRole"/>
    <setHeader name="CamelAwsIAMRoleName">
        <constant>myRole</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=deleteRole"/>
</route>
- route:
    from:
      uri: direct:deleteRole
      steps:
        - setHeader:
            name: CamelAwsIAMRoleName
            constant: myRole
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: deleteRole
  • getRole: IAM에서 역할을 조회하는 연산이에요.
from("direct:getRole")
    .setHeader("CamelAwsIAMRoleName", constant("myRole"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=getRole");
<route>
    <from uri="direct:getRole"/>
    <setHeader name="CamelAwsIAMRoleName">
        <constant>myRole</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=getRole"/>
</route>
- route:
    from:
      uri: direct:getRole
      steps:
        - setHeader:
            name: CamelAwsIAMRoleName
            constant: myRole
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: getRole
  • listRoles: IAM에서 역할 목록을 조회하는 연산이에요.
from("direct:listRoles")
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listRoles");
<route>
    <from uri="direct:listRoles"/>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=listRoles"/>
</route>
- route:
    from:
      uri: direct:listRoles
      steps:
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: listRoles

정책(Policy) 연산

  • createPolicy: IAM에서 정책을 만드는 연산이에요.
from("direct:createPolicy")
    .setHeader("CamelAwsIAMPolicyName", constant("myPolicy"))
    .setHeader("CamelAwsIAMPolicyDocument", constant("{...}"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createPolicy");
<route>
    <from uri="direct:createPolicy"/>
    <setHeader name="CamelAwsIAMPolicyName">
        <constant>myPolicy</constant>
    </setHeader>
    <setHeader name="CamelAwsIAMPolicyDocument">
        <constant>{...}</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=createPolicy"/>
</route>
- route:
    from:
      uri: direct:createPolicy
      steps:
        - setHeader:
            name: CamelAwsIAMPolicyName
            constant: myPolicy
        - setHeader:
            name: CamelAwsIAMPolicyDocument
            constant: "{...}"
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: createPolicy
  • deletePolicy: IAM에서 정책을 삭제하는 연산이에요.
from("direct:deletePolicy")
    .setHeader("CamelAwsIAMPolicyArn", constant("arn:aws:iam::123456789012:policy/myPolicy"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=deletePolicy");
<route>
    <from uri="direct:deletePolicy"/>
    <setHeader name="CamelAwsIAMPolicyArn">
        <constant>arn:aws:iam::123456789012:policy/myPolicy</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=deletePolicy"/>
</route>
- route:
    from:
      uri: direct:deletePolicy
      steps:
        - setHeader:
            name: CamelAwsIAMPolicyArn
            constant: "arn:aws:iam::123456789012:policy/myPolicy"
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: deletePolicy
  • getPolicy: IAM에서 정책을 조회하는 연산이에요.
from("direct:getPolicy")
    .setHeader("CamelAwsIAMPolicyArn", constant("arn:aws:iam::123456789012:policy/myPolicy"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=getPolicy");
<route>
    <from uri="direct:getPolicy"/>
    <setHeader name="CamelAwsIAMPolicyArn">
        <constant>arn:aws:iam::123456789012:policy/myPolicy</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=getPolicy"/>
</route>
- route:
    from:
      uri: direct:getPolicy
      steps:
        - setHeader:
            name: CamelAwsIAMPolicyArn
            constant: "arn:aws:iam::123456789012:policy/myPolicy"
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: getPolicy
  • listPolicies: IAM에서 정책 목록을 조회하는 연산이에요.
from("direct:listPolicies")
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listPolicies");
<route>
    <from uri="direct:listPolicies"/>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=listPolicies"/>
</route>
- route:
    from:
      uri: direct:listPolicies
      steps:
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: listPolicies

정책 연결(Policy Attachment) 연산

  • attachUserPolicy: 사용자에게 정책을 연결(attach)하는 연산이에요.
from("direct:attachUserPolicy")
    .setHeader("CamelAwsIAMUsername", constant("camel"))
    .setHeader("CamelAwsIAMPolicyArn", constant("arn:aws:iam::123456789012:policy/myPolicy"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=attachUserPolicy");
<route>
    <from uri="direct:attachUserPolicy"/>
    <setHeader name="CamelAwsIAMUsername">
        <constant>camel</constant>
    </setHeader>
    <setHeader name="CamelAwsIAMPolicyArn">
        <constant>arn:aws:iam::123456789012:policy/myPolicy</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=attachUserPolicy"/>
</route>
- route:
    from:
      uri: direct:attachUserPolicy
      steps:
        - setHeader:
            name: CamelAwsIAMUsername
            constant: camel
        - setHeader:
            name: CamelAwsIAMPolicyArn
            constant: "arn:aws:iam::123456789012:policy/myPolicy"
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: attachUserPolicy
  • detachUserPolicy: 사용자에서 정책을 떼어 내는(detach) 연산이에요.
from("direct:detachUserPolicy")
    .setHeader("CamelAwsIAMUsername", constant("camel"))
    .setHeader("CamelAwsIAMPolicyArn", constant("arn:aws:iam::123456789012:policy/myPolicy"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=detachUserPolicy");
<route>
    <from uri="direct:detachUserPolicy"/>
    <setHeader name="CamelAwsIAMUsername">
        <constant>camel</constant>
    </setHeader>
    <setHeader name="CamelAwsIAMPolicyArn">
        <constant>arn:aws:iam::123456789012:policy/myPolicy</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=detachUserPolicy"/>
</route>
- route:
    from:
      uri: direct:detachUserPolicy
      steps:
        - setHeader:
            name: CamelAwsIAMUsername
            constant: camel
        - setHeader:
            name: CamelAwsIAMPolicyArn
            constant: "arn:aws:iam::123456789012:policy/myPolicy"
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: detachUserPolicy
  • attachGroupPolicy: 그룹에 정책을 연결하는 연산이에요.
from("direct:attachGroupPolicy")
    .setHeader("CamelAwsIAMGroupName", constant("myGroup"))
    .setHeader("CamelAwsIAMPolicyArn", constant("arn:aws:iam::123456789012:policy/myPolicy"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=attachGroupPolicy");
<route>
    <from uri="direct:attachGroupPolicy"/>
    <setHeader name="CamelAwsIAMGroupName">
        <constant>myGroup</constant>
    </setHeader>
    <setHeader name="CamelAwsIAMPolicyArn">
        <constant>arn:aws:iam::123456789012:policy/myPolicy</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=attachGroupPolicy"/>
</route>
- route:
    from:
      uri: direct:attachGroupPolicy
      steps:
        - setHeader:
            name: CamelAwsIAMGroupName
            constant: myGroup
        - setHeader:
            name: CamelAwsIAMPolicyArn
            constant: "arn:aws:iam::123456789012:policy/myPolicy"
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: attachGroupPolicy
  • detachGroupPolicy: 그룹에서 정책을 떼어 내는 연산이에요.
from("direct:detachGroupPolicy")
    .setHeader("CamelAwsIAMGroupName", constant("myGroup"))
    .setHeader("CamelAwsIAMPolicyArn", constant("arn:aws:iam::123456789012:policy/myPolicy"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=detachGroupPolicy");
<route>
    <from uri="direct:detachGroupPolicy"/>
    <setHeader name="CamelAwsIAMGroupName">
        <constant>myGroup</constant>
    </setHeader>
    <setHeader name="CamelAwsIAMPolicyArn">
        <constant>arn:aws:iam::123456789012:policy/myPolicy</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=detachGroupPolicy"/>
</route>
- route:
    from:
      uri: direct:detachGroupPolicy
      steps:
        - setHeader:
            name: CamelAwsIAMGroupName
            constant: myGroup
        - setHeader:
            name: CamelAwsIAMPolicyArn
            constant: "arn:aws:iam::123456789012:policy/myPolicy"
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: detachGroupPolicy
  • attachRolePolicy: 역할에 정책을 연결하는 연산이에요.
from("direct:attachRolePolicy")
    .setHeader("CamelAwsIAMRoleName", constant("myRole"))
    .setHeader("CamelAwsIAMPolicyArn", constant("arn:aws:iam::123456789012:policy/myPolicy"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=attachRolePolicy");
<route>
    <from uri="direct:attachRolePolicy"/>
    <setHeader name="CamelAwsIAMRoleName">
        <constant>myRole</constant>
    </setHeader>
    <setHeader name="CamelAwsIAMPolicyArn">
        <constant>arn:aws:iam::123456789012:policy/myPolicy</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=attachRolePolicy"/>
</route>
- route:
    from:
      uri: direct:attachRolePolicy
      steps:
        - setHeader:
            name: CamelAwsIAMRoleName
            constant: myRole
        - setHeader:
            name: CamelAwsIAMPolicyArn
            constant: "arn:aws:iam::123456789012:policy/myPolicy"
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: attachRolePolicy
  • detachRolePolicy: 역할에서 정책을 떼어 내는 연산이에요.
from("direct:detachRolePolicy")
    .setHeader("CamelAwsIAMRoleName", constant("myRole"))
    .setHeader("CamelAwsIAMPolicyArn", constant("arn:aws:iam::123456789012:policy/myPolicy"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=detachRolePolicy");
<route>
    <from uri="direct:detachRolePolicy"/>
    <setHeader name="CamelAwsIAMRoleName">
        <constant>myRole</constant>
    </setHeader>
    <setHeader name="CamelAwsIAMPolicyArn">
        <constant>arn:aws:iam::123456789012:policy/myPolicy</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=detachRolePolicy"/>
</route>
- route:
    from:
      uri: direct:detachRolePolicy
      steps:
        - setHeader:
            name: CamelAwsIAMRoleName
            constant: myRole
        - setHeader:
            name: CamelAwsIAMPolicyArn
            constant: "arn:aws:iam::123456789012:policy/myPolicy"
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: detachRolePolicy

인스턴스 프로파일(Instance Profile) 연산

  • createInstanceProfile: IAM에서 인스턴스 프로파일을 만드는 연산이에요.
from("direct:createInstanceProfile")
    .setHeader("CamelAwsIAMInstanceProfileName", constant("myInstanceProfile"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createInstanceProfile");
<route>
    <from uri="direct:createInstanceProfile"/>
    <setHeader name="CamelAwsIAMInstanceProfileName">
        <constant>myInstanceProfile</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=createInstanceProfile"/>
</route>
- route:
    from:
      uri: direct:createInstanceProfile
      steps:
        - setHeader:
            name: CamelAwsIAMInstanceProfileName
            constant: myInstanceProfile
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: createInstanceProfile
  • deleteInstanceProfile: IAM에서 인스턴스 프로파일을 삭제하는 연산이에요.
from("direct:deleteInstanceProfile")
    .setHeader("CamelAwsIAMInstanceProfileName", constant("myInstanceProfile"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=deleteInstanceProfile");
<route>
    <from uri="direct:deleteInstanceProfile"/>
    <setHeader name="CamelAwsIAMInstanceProfileName">
        <constant>myInstanceProfile</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=deleteInstanceProfile"/>
</route>
- route:
    from:
      uri: direct:deleteInstanceProfile
      steps:
        - setHeader:
            name: CamelAwsIAMInstanceProfileName
            constant: myInstanceProfile
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: deleteInstanceProfile
  • getInstanceProfile: IAM에서 인스턴스 프로파일을 조회하는 연산이에요.
from("direct:getInstanceProfile")
    .setHeader("CamelAwsIAMInstanceProfileName", constant("myInstanceProfile"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=getInstanceProfile");
<route>
    <from uri="direct:getInstanceProfile"/>
    <setHeader name="CamelAwsIAMInstanceProfileName">
        <constant>myInstanceProfile</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=getInstanceProfile"/>
</route>
- route:
    from:
      uri: direct:getInstanceProfile
      steps:
        - setHeader:
            name: CamelAwsIAMInstanceProfileName
            constant: myInstanceProfile
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: getInstanceProfile
  • listInstanceProfiles: IAM에서 인스턴스 프로파일 목록을 조회하는 연산이에요.
from("direct:listInstanceProfiles")
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listInstanceProfiles");
<route>
    <from uri="direct:listInstanceProfiles"/>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=listInstanceProfiles"/>
</route>
- route:
    from:
      uri: direct:listInstanceProfiles
      steps:
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: listInstanceProfiles
  • addRoleToInstanceProfile: 인스턴스 프로파일에 역할을 추가하는 연산이에요.
from("direct:addRoleToInstanceProfile")
    .setHeader("CamelAwsIAMInstanceProfileName", constant("myInstanceProfile"))
    .setHeader("CamelAwsIAMRoleName", constant("myRole"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=addRoleToInstanceProfile");
<route>
    <from uri="direct:addRoleToInstanceProfile"/>
    <setHeader name="CamelAwsIAMInstanceProfileName">
        <constant>myInstanceProfile</constant>
    </setHeader>
    <setHeader name="CamelAwsIAMRoleName">
        <constant>myRole</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=addRoleToInstanceProfile"/>
</route>
- route:
    from:
      uri: direct:addRoleToInstanceProfile
      steps:
        - setHeader:
            name: CamelAwsIAMInstanceProfileName
            constant: myInstanceProfile
        - setHeader:
            name: CamelAwsIAMRoleName
            constant: myRole
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: addRoleToInstanceProfile
  • removeRoleFromInstanceProfile: 인스턴스 프로파일에서 역할을 제거하는 연산이에요.
from("direct:removeRoleFromInstanceProfile")
    .setHeader("CamelAwsIAMInstanceProfileName", constant("myInstanceProfile"))
    .setHeader("CamelAwsIAMRoleName", constant("myRole"))
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=removeRoleFromInstanceProfile");
<route>
    <from uri="direct:removeRoleFromInstanceProfile"/>
    <setHeader name="CamelAwsIAMInstanceProfileName">
        <constant>myInstanceProfile</constant>
    </setHeader>
    <setHeader name="CamelAwsIAMRoleName">
        <constant>myRole</constant>
    </setHeader>
    <to uri="aws2-iam://test?iamClient=#amazonIAMClient&amp;operation=removeRoleFromInstanceProfile"/>
</route>
- route:
    from:
      uri: direct:removeRoleFromInstanceProfile
      steps:
        - setHeader:
            name: CamelAwsIAMInstanceProfileName
            constant: myInstanceProfile
        - setHeader:
            name: CamelAwsIAMRoleName
            constant: myRole
        - to:
            uri: aws2-iam://test
            parameters:
              iamClient: "#amazonIAMClient"
              operation: removeRoleFromInstanceProfile

POJO를 본문으로 쓰기 (Using a POJO as body)

옵션이 여러 개다 보니 AWS 요청을 만드는 게 복잡할 때가 있어요. 그래서 POJO를 본문으로 쓰는 방법도 제공돼요. AWS IAM에서는 제출할 수 있는 연산이 여러 가지인데, 예를 들어 Create User 요청이라면 이렇게 할 수 있습니다:

Java 전용: AWS SDK builder가 필요해요

from("direct:createUser")
     .setBody(CreateUserRequest.builder().userName("camel").build())
    .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createUser&pojoRequest=true")

이렇게 하면 이 연산과 관련된 헤더와 옵션을 일일이 넘기지 않고도 요청을 바로 전달할 수 있어요.

의존성 (Dependencies)

Maven 사용자는 pom.xml에 다음 의존성을 추가해야 해요.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws2-iam</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 실제 Camel 버전으로 바꿔야 해요.

더 알아보기 (Learn more)

IAM 사용자·그룹·역할·정책 연산의 실제 사용 예는 위의 예시 (Examples) 섹션에서 확인할 수 있어요. 자격 증명 설정 방법이 궁금하면 AWS credentials documentation을 참고하고, 다른 AWS 서비스 컴포넌트는 AWS 2 컴포넌트 문서에서 찾아볼 수 있습니다. 의존성 좌표는 위의 의존성(Dependencies) 섹션 그대로 camel-aws2-iam 아티팩트를 쓰면 돼요.