암호화된 AWS Secrets Manager 보안 암호에 액세스하는 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 3월 23일

AWS Secrets Manager 보안 암호를 검색하거나 액세스하려고 했지만 다음과 비슷한 오류 메시지를 수신했습니다.

  • “기본 KMS 서비스 키로 보안 암호를 암호화하면 다른 AWS 계정에서 보안 암호에 액세스할 수 없습니다.
  • "KMS에 대한 액세스가 허용되지 않음(Access to KMS is not allowed)", "내부 장애(InternalFailure)", 또는 "알 수 없는 오류 발생(An unknown error occurred)"
  • “KMS 액세스가 허용되지 않습니다. 이 버전의 보안 암호는 현재 KMS 키로 암호화되지 않았습니다.(Access to KMS is not allowed. This version of secret is not encrypted with the current KMS key.)“

해결 방법

참고: AWS 명령줄 인터페이스(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

다른 계정의 암호에 액세스할 때 암호가 AWS Key Management Service(AWS KMS) 관리형 키로 암호화되지 않았는지 확인합니다.

AWS 관리형 키 정책은 읽기 전용이므로 편집할 수 없지만 AWS 관리형 키 및 고객 관리형 키 정책은 볼 수 있습니다. AWS 관리형 KMS 키 정책은 편집할 수 없으므로 이러한 키 정책에 대해 교차 계정 권한을 부여할 수 없습니다. AWS 관리형 KMS 키를 사용하여 암호화된 Secrets Manager 보안 암호는 다른 AWS 계정에서 액세스할 수 없습니다.

교차 계정의 경우 자격 증명 기반 정책 및 리소스 기반 정책에서 보안 주체가 KMS 키에 액세스할 수 있도록 허용하는지 확인합니다.

자격 증명 정책에서는 보안 주체가 다음과 유사하게 KMS 키에 액세스할 수 있도록 허용해야 합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:Region:AccountID:key/EncryptionKey"
    }
  ]
}

리소스 기반 정책은 다음과 유사하게 보안 주체가 KMS 키에 액세스할 수 있도록 허용해야 합니다.

{
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::AccountID:user/UserName",
      "arn:aws:iam::AccountID:role/RoleName"
    ]
  },
  "Action": [
    "kms:Decrypt",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}

KMS 키가 업데이트된 후 암호가 새 KMS 키로 암호화되었는지 확인합니다.

AWS CLI를 사용하여 Secrets Manager 보안 암호와 연결된 KMS 키를 업데이트해도 새로운 KMS 키로 현재 또는 이전 버전의 보안 암호가 다시 암호화되지는 않습니다. 즉, 새 KMS 키로 보안 암호가 다시 암호화되지 않았기 때문에 교차 계정이라고도 하는 외부 계정은 보안 암호에 액세스할 수 없습니다. 교차 계정에서 보안 암호 값을 검색하려면 새 AWS KMS 키를 사용하여 보안 암호를 다시 암호화해야 합니다.

참고: 기본적으로 Secret Manager 콘솔을 사용하여 보안 암호와 연결된 KMS 키를 변경하면 새 버전의 보안 암호가 만들어지고 새 암호화 키로 암호화됩니다. 자세한 내용은 보안 암호 암호화 및 복호화를 참조하세요.

새 KMS 키로 암호를 다시 암호화합니다.

다음 단계에 따라 AWS 관리 콘솔 또는 AWS CLI를 사용하여 새 KMS 키로 암호를 다시 암호화합니다.

AWS 관리 콘솔

1.    Secrets Manager 콘솔을 여십시오.

2.    [Secret name]에서 보안 암호를 선택합니다.

3.    작업(Action)을 선택한 다음 드롭다운 목록을 선택하고 KMS 키를 선택한 다음 새 암호화 키로 새 버전의 암호 만들기(Create new version of secret with new encryption key) 확인란을 선택하고 저장(Save)을 선택합니다.

AWS CLI

보안 암호가 있는 소스 계정에서 다음 단계를 수행합니다.

1.    다음과 유사한 AWS CLI 명령 get-secret-value를 실행합니다.

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --query SecretString --output text

    {"CrossAccount":"DefaultEncryption"}

2.    creds.txt라는 파일을 만듭니다.

$ cat creds.txt

    {"CrossAccount":"DefaultEncryption"}

3.    AWS CLI update-secret 명령을 실행하여 다음과 유사한 암호화 키를 다시 암호화합니다.

$ aws secretsmanager update-secret --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --secret-string file://creds.txt

    {
    "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:cross-account",
    "Name": "cross-account",
    "VersionId": "f68246e8-1cfb-4c3b-952b-17c9298d3462"
    }

4.    교차 계정에서 다음과 유사한 AWS CLI 명령 get-secret-value를 실행합니다.

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --version-stage AWSCURRENT --profile

    {"CrossAccount":"DefaultEncryption"}