에 대한 자격 증명 기반 정책(IAM 정책) 사용Secrets Manager - AWS Secrets Manager

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

에 대한 자격 증명 기반 정책(IAM 정책) 사용Secrets Manager

계정 관리자는 IAM 자격 증명(예: 사용자, 그룹, 역할)에 권한 정책을 연결하여 계정에서 AWS 리소스에 대한 액세스를 제어할 수 있습니다. 권한을 부여할 때 권한, 리소스 및 해당 리소스에 허용되는 특정 작업을 결정합니다. 역할에 권한을 부여할 경우, 지정한 다른 계정의 사용자가 이 역할을 맡을 수 있습니다.

기본적으로 사용자 또는 역할에는 어떠한 권한도 없습니다. 권한은 정책을 사용하여 명시적으로 부여해야 합니다. 명시적으로 권한을 부여하지 않으면 권한이 암시적으로 거부됩니다. 명시적으로 권한을 거부하면 권한을 허용하는 다른 정책보다 우선 적용됩니다. 즉 사용자는 명시적으로 부여되며 명시적으로 거부되지 않은 권한만 가집니다.

정책의 기본 요소를 개략적으로 살펴보려면 정책을 통해 리소스에 대한 액세스 관리 단원을 참조하십시오.

Secrets Manager를 위한 AWS 관리형 정책

AWS Secrets Manager는 쉽게 권한을 부여할 수 있도록 하기 위해 다음 AWS 관리형 정책을 제공합니다. IAM 콘솔에서 링크를 선택하여 정책을 확인합니다.

사용자에게 전체 Secrets Manager 관리자 권한 부여

Secrets Manager 관리자가 되려면 여러 서비스의 권한이 있어야 합니다. Secrets Manager를 사용자가 자체 보안 암호를 생성하고 관리할 수 있는 최종 사용자 서비스로 활성화하지 않는 것이 좋습니다. 교체를 활성화하는 데 필요한 권한은 표준 사용자가 가질 수 없는 중요한 권한을 부여합니다. 대신 신뢰할 수 있는 관리자가 Secrets Manager 서비스를 관리합니다. 최종 사용자가 더 이상 자격 증명을 직접 처리하거나 코드에 포함하지 않습니다.

주의

교체를 활성화하면 Secrets Manager가 Lambda 함수를 생성하고 IAM 역할을 해당 함수에 연결합니다. 이를 위해서는 신뢰할 수 있는 개인에게만 부여되어야 하는 여러 IAM 권한이 필요합니다. 따라서 Secrets Manager에 대한 관리형 정책은 이러한 IAM 권한을 포함하지 않습니다. SecretsManagerReadWrite 관리형 정책 외에도 IAMFullAccess 관리형 정책을 할당하여 전체 Secrets Manager 관리자를 생성하도록 명시적으로 선택해야 합니다.

SecretsManagerReadWrite 정책을 통해서만 액세스 권한을 부여하면 IAM 사용자가 보안 암호를 생성하고 관리할 수 있지만 해당 사용자는 교체를 활성화하는 데 필요한 Lambda 교체 함수를 생성하고 구성할 수 없습니다.

계정의 IAM 사용자, 그룹 또는 역할에 전체 Secrets Manager 관리자 권한을 부여하려면 다음 단계를 완료하십시오. 이 예제에서는 새 정책을 만들지 않습니다. 대신 권한이 사전 구성된 AWS 관리형 정책을 연결합니다.

IAM 사용자, 그룹 또는 역할에 전체 관리자 권한을 추가하려면

  1. https://console.aws.amazon.com/iam/에서 Identity and Access Management(IAM) 콘솔에 IAM 정책을 다른 IAM 사용자에게 연결할 권한이 있는 사용자로 로그인합니다.

    IAM 콘솔에서 정책으로 이동합니다.

  2. Filter Policies: Policy type(정책 필터: 정책 유형)에서 AWS managed(AWS 관리형)를 선택한 후 목록에 정책이 표시될 때까지 검색 상자에 SecretsManagerReadWrite를 입력합니다.

  3. [SecretsManagerReadWrite] 정책 이름을 선택합니다.

  4. Policy actions(정책 작업)를 선택한 후 연결을 선택합니다.

  5. Secrets Manager 관리자로 추가하려는 사용자, 그룹 또는 역할 옆의 상자를 선택합니다.

  6. [Attach policy]를 선택합니다.

  7. 1~6단계를 반복하여 [IAMFullAccess] 정책을 연결합니다.

선택한 사용자, 그룹 및 역할은 Secrets Manager에서 작업을 즉시 시작할 수 있습니다.

하나의 보안 암호에 대한 읽기 액세스 권한 부여

Secrets Manager를 사용하여 보안 암호를 검색하고 사용하는 애플리케이션을 작성하면 해당 애플리케이션에 매우 제한된 권한 세트만 부여해야 합니다. Secrets Manager에서는 자격 증명을 사용하여 암호화된 보안 암호 값을 검색할 수 있는 작업을 수행하기 위한 권한만 있으면 됩니다. 보안 암호의 Amazon 리소스 이름(ARN)을 지정하여 해당 보안 암호로만 액세스를 제한합니다.

https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

정책 생성을 선택하고 다음 코드를 추가합니다.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "<arn-of-the-secret-the-app-needs-to-access>" } }

IAM 정책에 할당할 수 있는 전체 권한 목록은 AWS Secrets Manager용 IAM 정책 또는 보안 암호 정책에서 사용할 수 있는 작업, 리소스 및 콘텍스트 키 단원을 참조하십시오.

특정 작업으로 액세스 제한

전체 권한이 아닌 제한적 권한을 부여하려면, IAM 권한 정책의 Action 요소에서 허용할 개별 권한을 나열하는 정책을 만들어야 합니다. 다음 예제와 같이 와일드카드(*) 문자를 사용하여 Describe*, Get*List* 권한만 부여함으로써 보안 암호에 읽기 전용 액세스를 제공할 수 있습니다.

https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

정책 생성을 선택하고 다음 코드를 추가합니다.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "secretsmanager:Describe*", "secretsmanager:Get*", "secretsmanager:List*" ], "Resource": "*" } }

IAM 정책에 할당할 수 있는 전체 권한 목록은 AWS Secrets Manager용 IAM 정책 또는 보안 암호 정책에서 사용할 수 있는 작업, 리소스 및 콘텍스트 키 단원을 참조하십시오.

특정 보안 암호에 대한 액세스 제한

특정 작업에 대한 액세스를 제한하는 것뿐만 아니라, 계정의 특정 보안 암호에 대한 액세스를 제한할 수도 있습니다. 이전 예제에 등장하는 Resource 요소는 모두 와일드카드 문자("*")를 지정하는데, 이는 "작업이 상호 작용할 수 있는 모든 리소스"라는 뜻입니다. "*"를 액세스를 허용할 특정 보안 암호의 ARN으로 바꿔도 됩니다.

예: 이름으로 단일 보안 암호에 권한 부여

다음 정책의 첫 번째 명령문은 계정의 모든 보안 암호의 메타데이터에 대한 읽기 액세스 권한을 사용자에게 부여합니다. 하지만 두 번째 명령문은 사용자가 이름으로 지정된 단일 보안 암호 또는 문자열 "another_secret_name-"(뒤에 정확하게 6자가 옴)으로 시작하는 모든 보안 암호에 대해 모든 Secrets Manager 작업을 수행하도록 합니다.

https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

정책 생성을 선택하고 다음 코드를 추가합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:List*" ], "Resource": "*" }, { "Effect": "Allow", "Action": "secretsmanager:*", "Resource": [ "arn:aws:secretsmanager:<region>:<account-id-number>:secret:a_specific_secret_name-a1b2c3", "arn:aws:secretsmanager:<region>:<account-id-number>:secret:another_secret_name-??????" ] } ] }

와일드카드로 '??????'를 사용하여 Secrets Manager가 할당한 임의의 6자를 검색하면 '*' 와일드카드를 사용할 경우 발생하는 문제를 피할 수 있습니다. "another_secret_name-*" 구문을 사용할 경우 Secrets Manager에서는 6자의 임의 문자를 포함하는 해당 보안 암호를 검색할 뿐 아니라 "another_secret_name-<anything-here>a1b2c3"도 검색합니다. '??????' 구문을 사용하면 아직 존재하지 않는 보안 암호에 안전하게 권한을 부여할 수 있습니다. 6자의 임의 문자를 제외한 ARN의 모든 부분을 예측할 수 있기 때문입니다. 하지만 보안 암호를 삭제한 후 이름이 동일한 보안 암호를 다시 생성할 경우, 임의의 문자 6자가 변경되더라도 새 보안 암호에 대한 권한이 사용자에게 자동으로 부여됩니다.

Secrets Manager 콘솔에서(보안 암호의 세부 정보 페이지에서) 또는 List* API를 호출하여 보안 암호에 대한 ARN을 얻을 수 있습니다. 이 정책을 적용한 사용자 또는 그룹은 예제의 ARN으로 식별된 보안 암호 두 개에 대해서만 작업("secretsmanager:*")을 수행할 수 있습니다.

보안 암호를 소유한 계정이나 리전은 상관없을 경우 ARN의 리전 필드와 계정 ID 번호 필드에 빈 필드가 아닌 와일드카드 문자 *를 지정해야 합니다.

다양한 리소스에 대한 ARN에 대한 자세한 정보는 IAM 정책 또는 보안 암호 정책에서 참조할 수 있는 리소스을(를) 참조하십시오.

특정 스테이징 레이블 또는 태그가 지정된 보안 암호로 액세스 제한

이전 예제에서는 이름 또는 ARN만을 기준으로 작업, 리소스 및 보안 주체를 명시적으로 호출했습니다. 또한 특정 태그 키 및 값이 포함된 메타데이터가 있는 보안 암호 또는 특정 레이블이 지정된 보안 암호만 포함하도록 액세스를 미세 조정할 수 있습니다.

예제: 특정 태그 키 및 값이 포함된 메타데이터가 있는 보안 암호에 대한 권한 부여

다음 정책은 사용자, 그룹 또는 역할에 연결된 경우 사용자가 키가 "ServerName"이고 값이 "ServerABC"인 태그가 포함된 메타데이터가 있는 현재 계정의 보안 암호에 대해 DescribeSecret을 사용하도록 허용합니다.

https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

정책 생성을 선택하고 다음 코드를 추가합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:DescribeSecret", "Resource": "*", "Condition": { "StringEquals": { "secretsmanager:ResourceTag/ServerName": "ServerABC" } } } ] }

예제: 특정 스테이징 레이블이 있는 보안 암호 버전에 권한 부여

다음 정책은 사용자, 그룹 또는 역할에 연결된 경우 사용자가 스테이징 레이블 AWSCURRENT가 연결된 버전에 대해서만 이름이 Prod로 시작하는 보안 암호에 대해 GetSecretValue를 사용하도록 허용합니다.

https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

정책 생성을 선택하고 다음 코드를 추가합니다.

{ "Policy": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecret", "Resource": "arn:aws:secretsmanager:*:*:secret:Prod*", "Condition": { "ForAnyValue:StringEquals": { "secretsmanager:VersionStage": "AWSCURRENT" } } } ] } }

보안 암호의 버전에는 여러 스테이징 레이블을 연결할 수 있기 때문에 IAM 정책 언어의 "설정 연산자를 사용하여 레이블을 비교할 수 있습니다. 이전 예제에서 ForAnyValue:StringLike는 평가 중인 버전에 연결된 스테이징 레이블 중 하나가 AWSCURRENT 문자열과 일치하는 경우 해당 문이 일치하고 Effect가 적용되도록 했습니다.

별도의 마스터 보안 암호에 액세스할 수 있는 교체 함수 권한 부여

콘솔 또는 AWS CLI 명령을 사용하는 방식을 통해 제공된 AWS Serverless Application Repository 템플릿을 사용하는 Lambda 교체 함수를 생성할 때 함수 역할에 연결된 기본 정책이 함수 작업을 제어합니다. 기본적으로 이 정책은 보안 암호 교체 함수로 구성된 Lambda 함수를 가진 보안 암호에 대한 액세스 권한만 부여합니다.

보안 암호의 자격 증명에서 사용자가 보안 데이터베이스 또는 서비스에서 암호를 변경할 수 있는 권한을 허용하지 않는 경우 교체 중에 이 보안 암호 자격 증명을 변경할 수 있는 승격된 권한(수퍼유저)을 가진 별도의 자격 증명 세트를 사용해야 합니다. Secrets Manager는 수퍼유저 자격 증명을 별도의 "마스터" 보안 암호에 저장합니다. 그런 다음 보안 암호를 교체할 때 Lambda 교체 함수는 마스터 자격 증명으로 데이터베이스 또는 서비스에 로그인하여 보안 암호 자격 증명을 변경하거나 업데이트합니다. 이 전략을 구현하도록 선택한 경우 주요 보안 암호 외에 이 마스터 보안 암호에 액세스 권한을 부여하는 함수에 연결된 역할 정책에 추가 설명문을 추가해야 합니다.

콘솔을 사용하여 마스터 보안 암호를 사용하는 전략으로 교체를 구성하는 경우 보안 암호에 대한 교체를 구성할 때 마스터 보안 암호를 선택할 수 있습니다.

중요

콘솔에서 이를 선택하려면 마스터 보안 암호에 대해 GetSecretValue 권한이 있어야 합니다.

콘솔에서 교체를 구성한 후에는 다음 단계를 수동으로 수행하여 Lambda 함수에 마스터 보안 암호에 대한 액세스 권한을 부여해야 합니다.

Lambda 교체 함수에 마스터 보안 암호에 대한 액세스 권한을 부여하려면

다음 탭 중 하나에 있는 단계를 따릅니다.

Using the console
  1. 보안 암호를 만들고 교체를 활성화하거나, 보안 암호를 편집하여 교체를 활성화하면 콘솔에 다음과 같은 메시지가 표시됩니다.

    Your secret MyNewSecret has been successfully stored [and secret rotation is enabled]. To finish configuring rotation, you need to grant the role MyLambdaFunctionRole permission to retrieve the secret <ARN of master secret>.
  2. 메시지의 마스터 보안 번호 ARN을 클립보드로 복사합니다. 이후 단계에서 사용하게 됩니다.

  3. 앞의 메시지에서 역할 이름은 IAM 콘솔에 대한 링크를 제공하며 해당 역할로 직접 이동합니다. 해당 링크를 선택합니다.

  4. 권한 탭에 하나 또는 두 개의 인라인 정책이 있을 수 있습니다. Secrets Manager에서는 이 중 하나의 이름을 SecretsManager<Name of Template>0으로 지정합니다. 이 템플릿에는 교체 함수와 사용자가 모두 VPC에서 보안 서비스를 실행 중이고 인터넷에서 직접 액세스할 수 없는 경우에 필요한 EC2 관련 권한이 포함되어 있습니다. SecretsManager<Name of Template>1이라는 다른 템플릿에는 Secrets Manager 작업을 호출하는 교체 함수를 활성화하는 권한이 포함되어 있습니다. 정책 왼쪽에 있는 확장 화살표를 선택하고 권한을 검사하여 해당 정책("1"로 끝나는 정책)을 엽니다.

  5. [Edit policy]를 선택한 다음 탭 중 하나에 있는 단계를 수행합니다.

    Using the IAM Visual EditorUsing the JSON editor
    Using the IAM Visual Editor

    [Visual editor] 탭에서 [Add additional permissions]를 선택한 다음 다음 값을 설정합니다.

    • [Service]에서 [Secrets Manager]를 선택합니다.

    • [Actions]에서 [GetSecretValue]를 선택합니다.

    • [Resources]에서 [secret] 리소스 유형 항목 옆의 [Add ARN]을 선택합니다.

    • Add ARN(s)(ARN 추가) 대화 상자에 이전에 복사한 마스터 보안 암호의 ARN을 붙여 넣습니다.

    Using the JSON editor

    [JSON] 탭에서 스크립트 맨 위를 검사합니다. 3행("Statement": [) 및 4행({) 사이에서 다음 행을 입력합니다.

    { "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:region:123456789012:secret:MyDatabaseMasterSecret", "Effect": "Allow" },
  6. 정책 편집을 마치면 정책 검토, 변경 사항 저장을 선택합니다.

  7. 이제 IAM 콘솔을 닫고 Secrets Manager 콘솔로 돌아갈 수 있습니다.

참고

Secrets Manager에서 사용할 수 있는 작업, 리소스 및 컨텍스트 키 전체 목록은AWS Secrets Manager에 사용되는 작업, 리소스 및 조건 키를 참조하십시오.