AWS OpenSearch支持OpenID Connect(OIDC)作为身份验证方法,使用户可以使用他们在OIDC提供者上拥有的凭据来访问OpenSearch集群。以下是使用OIDC进行身份验证的示例代码:
import boto3
from botocore.config import Config
config = Config(
region_name='us-west-2'
)
sts_client = boto3.client('sts', config=config)
assumed_role_object=sts_client.assume_role(
RoleArn="arn:aws:iam::accountId:role/testRole",
RoleSessionName="AssumeRoleSession1"
)
credentials=assumed_role_object['Credentials']
client = boto3.client('opensearch', config=config,
aws_access_key_id=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_session_token=credentials['SessionToken']
)
es_domain = "es-domain-endpoint"
oidc_client_id = "oidc-client-id"
oidc_client_secret = "oidc-client-secret"
oidc_issuer_url = "https://oidc-issuer-url.com"
oidc_username_claim = "sub"
response = client.create_elasticsearch_domain(
DomainName=es_domain,
ElasticsearchVersion='7.10',
ElasticsearchClusterConfig={
'InstanceType': 'r5.large.elasticsearch',
'InstanceCount': 1,
'DedicatedMasterEnabled': False,
'ZoneAwarenessEnabled': False,
'ZoneAwarenessConfig': {
'AvailabilityZoneCount': 1
}
},
AccessPolicies={
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": f"arn:aws:iam::{credentials['AwsAccountId']:d}:oidc-provider/{oidc_issuer_url}"
},
"Action": "es:*",
"Resource": f"arn:aws:es:{config.region_name}:{credentials['AwsAccountId']:d}:domain/{es_domain}/*",
"Condition": {
"StringEquals": {