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)
다음 형식으로 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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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 아티팩트를 쓰면 돼요.