암호화된 AWS Secrets Manager 보안 정보를 검색하거나 액세스하려고 했지만 AWS Key Management Service(AWS KMS) 키 액세스 오류가 발생했습니다.
해결 방법
AWS KMS 키 권한 문제로 인해 Secrets Manager 보안 정보를 검색하거나 액세스할 수 없는 경우 다음 오류 중 하나가 나타날 수 있습니다.
- "You can't access a secret from a different AWS account if you encrypt the secret with the default KMS service key."
- "Access to KMS is not allowed"
- "InternalFailure"
- "An unknown error occurred"
- "Access to KMS is not allowed. This version of secret is not encrypted with the current KMS key."
이 문제를 해결하려면 암호화된 보안 정보를 검색할 수 있는 올바른 권한으로 AWS KMS 키 정책을 업데이트하십시오. 그런 다음 업데이트된 AWS KMS 키로 보안 정보를 다시 암호화합니다.
참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
AWS KMS 관리형 키
다른 계정에서 보안 정보에 액세스하려면 보안 정보가 AWS KMS 관리 키로 암호화되지 않았는지 확인하십시오. 다른 계정에서는 AWS KMS 관리형 키로 암호화된 보안 정보에 액세스할 수 없습니다.
이는 읽기 전용이기 때문에 AWS 관리형 키 정책을 편집할 수 없습니다. 따라서 AWS 관리형 키 정책에 대한 교차 계정 권한을 부여할 수 없습니다.
교차 계정 액세스
교차 계정의 경우 ID 기반 정책과 리소스 기반 정책에서 보안 주체가 AWS KMS 키에 액세스할 수 있도록 명시적으로 허용하는지 확인하십시오.
보안 주체가 AWS KMS 키에 액세스할 수 있도록 허용하는 자격 증명 정책의 예:
{ "Version": "2012-10-17", "Statement": [
{
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "arn:aws:kms:Region:AccountID:key/EncryptionKey"
}
]
}
보안 주체가 AWS KMS 키에 액세스할 수 있도록 허용하는 KMS 리소스 기반 정책의 예:
{ "Effect": "Allow", "Principal": {
"AWS": [
"arn:aws:iam::AccountID:user/UserName",
"arn:aws:iam::AccountID:role/RoleName"
]
},
"Action": [
"kms:Decrypt",
"kms:DescribeKey"
],
"Resource": "*"
}
업데이트된 AWS KMS 키로 보안 정보를 다시 암호화
Secrets Manager 콘솔 또는 AWS CLI를 사용하여 업데이트된 AWS KMS 키로 보안 정보를 다시 암호화합니다.
Secrets Manager 콘솔
참고: Secrets Manager 콘솔을 사용하는 경우 Secrets Manager는 보안 정보의 새 버전을 생성하고 업데이트된 키로 이를 암호화합니다. 보안 정보를 사용하는 애플리케이션에 업데이트된 키로 보안 정보를 해독할 수 있는 권한이 있는지 확인하십시오. 자세한 내용은 AWS Secrets Manager의 보안 정보 암호화 및 해독을 참조하십시오.
- Secrets Manager 콘솔을 엽니다.
- 암호 이름에서 보안 정보를 선택합니다.
- 작업을 선택한 다음 암호화 키 편집을 선택합니다.
- 새 암호화 키로 새 버전의 보안 정보 생성을 선택한 다음 저장을 선택합니다.
AWS CLI
보안 정보가 있는 소스 계정에서 1~3단계를 완료하고 다른 계정에서 4단계를 완료합니다.
-
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"}
-
creds.txt라는 이름의 파일을 생성합니다.
cat creds.txt {"CrossAccount":"DefaultEncryption"}
-
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"
}
참고: 고객 관리형 키를 사용하는 경우, 키에 대한 kms:GenerateDataKey 및 kms:Decrypt 권한도 있어야 합니다.
-
다른 계정에서 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"}
관련 정보
AWS Secrets Manager 콘솔에서 리소스 기반 정책을 사용하여 AWS 계정 전반의 암호에 안전하게 액세스하는 방법
AWS 계정 간에 AWS Secrets Manager 보안 정보를 공유하려면 어떻게 해야 합니까?
다른 계정에서 AWS Secrets Manager 보안 정보에 액세스